字符类型

CREATE TABLE test_types (
    col_char CHAR(10),
    col_varchar2 VARCHAR2(20)  -- 如果报错,则说明不支持 VARCHAR2
);

数值类型

CREATE TABLE test_types (
    col_number NUMBER(10, 2),       -- 如果报错,说明不支持
    col_bfloat BINARY_FLOAT,        -- 如果报错,说明不支持
    col_bdouble BINARY_DOUBLE       -- 如果报错,说明不支持
);

时间间隔类型

CREATE TABLE test_interval_ym (
    col_interval INTERVAL YEAR TO MONTH  -- 仅存储年月
);

-- 插入数据测试
INSERT INTO test_interval_ym VALUES ('1-2');  -- 1年2个月
INSERT INTO test_interval_ym VALUES ('3-0');  -- 3年

CREATE TABLE test_interval_ds (
    col_interval INTERVAL DAY TO SECOND  -- 仅存储天、小时、分钟、秒
);

-- 插入数据测试
INSERT INTO test_interval_ds VALUES ('5 12:30:45.123');  -- 5天12小时30分45.123秒

日期时间类型

-- 创建表
CREATE TABLE test_timestamptz (
    col_timestamptz TIMESTAMP WITH TIME ZONE
);

-- 插入带时区的时间
INSERT INTO test_timestamptz VALUES
    ('2023-10-01 14:30:45+08'),
    ('2023-10-01 14:30:48+08'),
    (NOW());

-- 查询并观察时区转换
SET TIME ZONE 'Asia/Shanghai';
SELECT col_timestamptz AT TIME ZONE 'UTC' AS utc_time FROM test_timestamptz;

-- 尝试创建表(可能失败)
CREATE TABLE test_local_tz (
    col_local_tz TIMESTAMP WITH LOCAL TIME ZONE
);

ROWID

CREATE TABLE test_rowid (
    id ROWID,  -- 如果报错,说明不支持
    data TEXT
);

长类型

CREATE TABLE test_clob (
    id SERIAL PRIMARY KEY,
    content CLOB
);
 
-- 插入长文本数据
INSERT INTO test_clob (content) VALUES (REPEAT('This is a long text. ', 1000));
 
```sql
CREATE TABLE test_blob (
    data BLOB
);
 
INSERT INTO test_blob (data) VALUES (E'\\xDEADBEEF');
 
 
CREATE TABLE test_raw (
    hash RAW(32)  -- 假设存储 32 字节的哈希值
);
 
CREATE TABLE test_bfile (
    content BFILE
);
 
CREATE TABLE test_long (
    content LONG
);
 
CREATE TABLE test_long_raw (
    data LONG RAW
);
 
 

函数类型

# 1. 
-- 检查 SYSDATE 是否存在
SELECT proname, prosrc
FROM pg_proc
WHERE proname = 'sysdate';

-- 检查 SYSTIMESTAMP 是否存在
SELECT proname, prosrc
FROM pg_proc
WHERE proname = 'systimestamp';

SELECT proname, prosrc
FROM pg_proc
WHERE proname IN (
  'add_months', 'last_day', 'next_day', 'months_between',
  'current_date', 'current_timestamp', 'from_tz'
);

# 2. Call function
-- 调用 SYSDATE
SELECT SYSDATE;

-- 调用 SYSTIMESTAMP
SELECT SYSTIMESTAMP;

-- 测试 trim
SELECT trim('  test  ');  -- 输出 'test'

-- 测试 ltrim
SELECT ltrim('  test');   -- 输出 'test'

-- 测试 rtrim
SELECT rtrim('test  ');   -- 输出 'test'

-- 测试 length(字符数)
SELECT length('test');    -- 输出 4

-- 测试 lengthb(字节数,Oracle 特有)
SELECT lengthb('test');   -- 若存在则返回字节数(如英文字符为4),否则报错

-- 测试 nlssort(Oracle 语言排序函数)
SELECT nlssort('text', 'NLS_SORT=FRENCH');  -- 存在则返回二进制排序键,否则报错

-- 测试 rawtohex(将 RAW/BLOB 转为十六进制字符串)
SELECT rawtohex('abc'::bytea);  -- 存在则返回 '616263',否则报错

系统视图

SELECT * FROM ALL_PROCEDURES LIMIT 1;
SELECT * FROM DBA_PROCEDURES LIMIT 1;
SELECT * FROM USER_PROCEDURES LIMIT 1;
SELECT * FROM ALL_SOURCE LIMIT 1;
SELECT * FROM DBA_SOURCE LIMIT 1;
SELECT * FROM USER_SOURCE LIMIT 1;
SELECT * FROM ALL_ARGUMENTS LIMIT 1;
SELECT * FROM DBA_ARGUMENTS LIMIT 1;
SELECT * FROM USER_ARGUMENTS LIMIT 1;

序列

#1. 创建序列
CREATE SEQUENCE seqTest
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXvalue -- 不设置最大值
NOCYCLE -- 一直累加,不循环
CACHE 10; --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE

select * from user_sequences; 

Select * from all_sequences;