【发布时间】:2021-03-09 12:35:15
【问题描述】:
我们正在将代码从 TSQL 转换为 PL/SQL,在我们的一个 TSQL 查询中,我们有需要转换为 PL/SQL 的“输出”语句。 TSQL '输出' 的 PL/SQL 等价性是什么?
【问题讨论】:
-
只是猜测,因为我不知道 TSQL,但可能是 DBMS_OUTPUT。当要求等效功能时,最好描述或提供原始功能的链接。
标签: sql-server oracle tsql plsql
我们正在将代码从 TSQL 转换为 PL/SQL,在我们的一个 TSQL 查询中,我们有需要转换为 PL/SQL 的“输出”语句。 TSQL '输出' 的 PL/SQL 等价性是什么?
【问题讨论】:
标签: sql-server oracle tsql plsql
我不知道 MS SQL Server,所以我用 Google 搜索了 output 子句。
据我所知,Oracle 为此目的提供了RETURNING INTO 子句。下面是一个示例(您会注意到它不像 T-SQL 的 output 那样漂亮 ...)。
示例表:
SQL> select * from test order by deptno;
DEPTNO ENAME JOB
---------- ---------- ---------
20 ADAMS CLERK
20 SMITH CLERK
20 SCOTT ANALYST
20 JONES MANAGER
30 TURNER SALESMAN
30 BLAKE MANAGER
30 JAMES CLERK
30 WARD SALESMAN
30 ALLEN SALESMAN
30 MARTIN SALESMAN
10 rows selected.
让我们删除属于deptno = 20 的行,将它们返回到集合中并显示已删除的内容。
SQL> create or replace type t_row as object
2 (deptno number, ename varchar2(20), job varchar2(20));
3 /
Type created.
SQL> create or replace type t_tab as table of t_row;
2 /
Type created.
SQL> set serveroutput on
SQL> declare
2 l_tab t_tab;
3 begin
4 delete from test
5 where deptno = 20
6 returning t_row(deptno, ename, job) --> RETURNING clause, here
7 bulk collect into l_tab;
8
9 dbms_output.put_line('Deleted rows:');
10 for i in l_tab.first .. l_tab.last loop
11 dbms_output.put_line(l_tab(i).deptno ||' '||
12 rpad(l_tab(i).ename, 10, ' ') ||' '||
13 l_tab(i).job);
14 end loop;
15 end;
16 /
Deleted rows:
20 SMITH CLERK
20 JONES MANAGER
20 SCOTT ANALYST
20 ADAMS CLERK
PL/SQL procedure successfully completed.
表格中还剩下什么:
SQL> select * from test order by deptno;
DEPTNO ENAME JOB
---------- ---------- ---------
30 ALLEN SALESMAN
30 WARD SALESMAN
30 JAMES CLERK
30 BLAKE MANAGER
30 TURNER SALESMAN
30 MARTIN SALESMAN
6 rows selected.
SQL>
【讨论】: