[英]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.