[英]Migrate oracle sql query to PostgreSql
我有一个简单的Oracle查询:
SELECT SEQ_01.NEXTVAL FROM DUAL
我想以SQL标准编写此查询以在两个数据库中运行它
Oracle select seq_01.nextval from dual
的等效项是:
select nextval('seq_01');
手册中的更多详细信息: http : //www.postgresql.org/docs/current/static/functions-sequence.html
您无法编写在两个DBMS中均能正常工作的SQL语句。
它们都不实现SQL标准为序列定义的语法
使用您自己的函数,您实际上可以在两个DBMS中使用相同的SQL。
create or replace function seq_nextval(p_sequence_name varchar)
return integer
as
l_statement varchar(4000);
l_value integer;
begin
l_statement := 'select '||upper(p_sequence_name)||'.nextval from dual';
execute immediate l_statement
into l_value;
return l_value;
end;
/
select seq_nextval('seq_01')
from dual;
create table dual (dummy varchar(1));
insert into dual values ('X');
create function seq_nextval(p_sequence_name text)
returns bigint
as
$$
select nextval(p_sequence_name);
$$
language sql;
select seq_nextval('seq_01')
from dual;
请注意,您需要为DBMS独立SQL支付通常的价格:它在所有平台上的运行速度均相同。 特别是在Oracle解决办法用PL / SQL和动态SQL将是大量慢比一个普通seq_01.nextval
呼叫。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.