簡體   English   中英

將Oracle SQL查詢遷移到PostgreSql

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

對於Oracle

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;

對於Postgres

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM