Mau*_*olo 0 sql oracle postgresql
我有一个简单的 Oracle 查询:
SELECT SEQ_01.NEXTVAL FROM DUAL
Run Code Online (Sandbox Code Playgroud)
我想用 SQL 标准编写这个查询,以便在两个数据库中运行它
小智 5
Oracle 的等价物select seq_01.nextval from dual是:
select nextval('seq_01');
Run Code Online (Sandbox Code Playgroud)
手册中的更多详细信息:http://www.postgresql.org/docs/current/static/functions-sequence.html
您无法编写在两个 DBMS 中同样有效的 SQL 语句。它们都没有实现 SQL 标准为序列定义的语法
使用您自己的函数,您实际上可以使相同的 SQL 在两个 DBMS 中工作。
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;
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
请注意,您为 DBMS 独立 SQL 付出了通常的代价:它在所有平台上运行速度同样慢。特别是 Oracle 使用 PL/SQL 和动态 SQL 的解决方法将比普通调用慢得多seq_01.nextval。
| 归档时间: |
|
| 查看次数: |
1747 次 |
| 最近记录: |