【问题标题】:Oracle equivalency of TSQL 'output'Oracle 相当于 SQL 的“输出”
【发布时间】:2021-03-09 12:35:15
【问题描述】:

我们正在将代码从 TSQL 转换为 PL/SQL,在我们的一个 TSQL 查询中,我们有需要转换为 PL/SQL 的“输出”语句。 TSQL '输出' 的 PL/SQL 等价性是什么?

【问题讨论】:

  • 只是猜测,因为我不知道 TSQL,但可能是 DBMS_OUTPUT。当要求等效功能时,最好描述或提供原始功能的链接。

标签: sql-server oracle tsql plsql


【解决方案1】:

我不知道 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>

【讨论】:

    猜你喜欢
    • 2016-03-08
    • 1970-01-01
    • 2010-12-30
    • 1970-01-01
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    • 2023-02-23
    相关资源
    最近更新 更多