ROM ..)
PostgreSQL不支持在更新的字段中加上表名。
PostgreSQL不支持DELETE TABLE,可以使作DELETE FROM
PostgreSQL不支持在ORDER BY或GROUP BY中使用参数,如‘1’。而没有引号的数字是可以的。
PostgreSQL不支持CURRENT OF语句。
PostgreSQL不支持COMMIT。它会在BEGIN和END块间自动显示的提交。抛出例外时会产生ROLLBACK。
PostgreSQL不支持SAVEPOINT。可以用BEGIN,END和ROLLBACK完成同样的功能。
PostgreSQL不支持CONNECT。
PostgreSQL和Oracle都不支持用变量来指定表的字段名称。如使用v_IsProcessing替代IsProcessing。
PostgreSQL不支持EXECUTE IMMEDIATE...USING。可以使用SELECT和参数来完成相同的功能。
PostgreSQL在调用没有参数据函数时要加上括号。
DBMS.OUTPUT应该在一行内,以使自动翻译可用。
在PostgreSQL中任何字符串与NULL连接都会产生一个NULL的字符串。建议用COALESCE或将变量初始化为‘’。
注意:在Oracle中null||'a'结果是'a',而在PostgreSQL中结果是NULL,所以应使用coalesce(null,)||'a'。但时如果变量是Oracle的NVarchar类型时会引发ORA-12704:字符集不匹配的错误,这时可以这样做coalesce(to_char(myNVarCharVariable),)||'a'。
将以下语法
COALESCE(variable_integer, '')
用
COALESCE(variable_integer, 0)
来代替,以保证可以在PostgreSQL中也可以运行。
PostgreSQL执行SELECT FOR UPDATE是在表级而Oracle是在列级别。
PostgreSQL不支持带有三个参数的INSTR命令,可以使用SUBSTR。
在Oracle中SUBSTR(text,0,Y)和SUBSTR(text,1,Y)的结果是相同的,但是PostgreSQL中不同。所以要使用SUBSTR(text,1,Y)。
PostgreSQL不支持这样<<LABEL>>的标签。
在日期比较中默认的日期是1900.1.1或9999.12.31。
如要将日期类型转换为文本型时要使用to_date函数和相应的掩码。
如:
COALESCE(movementdate, TO_DATE('01-01-1900', 'DD-MM-YYYY'))
游标
有两种使用游标的方法:FETCH子句和FOR循环。
Oracle中FETCH游标的声明:
CURSOR Cur_SR IS
PostgreSQL中:
DECLARE Cur_SR CURSOR FOR
FOR循环中的游标格式:
TYPE RECORD IS REF CURSOR;
Cur_Name RECORD;
这在Oracle和PostgreSQL中都可以使用。
数组
在Oracle中数组是这样定义的:
TYPE ArrayPesos IS VARRAY(10) OF INTEGER;
v_pesos ArrayPesos;
v_dc2 := v_dc2 + v_pesos(v_contador)*v_digito;
但在PostgreSQL中是这样定义的:
v_pesos integer[];
v_dc2 := v_dc2 + v_pesos[v_contador]*v_digito;
ROWNUM
为了限制SELECT语句返回的行数,需要创建游标来读取记录。代码如下:
--Initialize counter
v_counter := initial_value;
--Create the cursor
FOR CUR_ROWNUM IN (SELECT CLAUSE)
LOOP
-- Some sentences
--Increment the counter
v_counter := v_counter + 1;
--Validate condition
IF (v_counter = condition_value) THEN
EXIT;
END IF;
END LOOP;
%ROWCOUNT
SQL%ROWCOUNT不能直接在PostgreSQL中使用,而需要定义一个变量。如:
GET DIAGNOSTICS rowcount := ROW_COUNT;
用上面定