代码之家  ›  专栏  ›  技术社区  ›  hi.nitish

在tsql中写入select“a”colname是有效的,pl/sql中的替代项是什么?

  •  -1
  • hi.nitish  · 技术社区  · 6 年前

    如果我写 SELECT 'a' colName UNION SELECT 'b' colName 在TSQL中,它返回一个临时表形式,稍后我可以在存储过程中使用它,以及pl/sql中的替代形式是什么?

    3 回复  |  直到 6 年前
        1
  •  2
  •   Boneist    6 年前

    在Oracle中,必须始终从表中选择。

    幸运的是,它们提供了一个表,特别是针对像您想写的查询——双表。

    因此,您的查询将变成:

    select 'a' colname from dual union all
    select 'b' colname;
    

    注意,为了避免不必要的分类/区别,我已经将联合改为联合所有。

    如果您打算在pl/sql中使用它,那么它在很大程度上取决于您将如何处理结果以及如何编写代码。

    如果要使用结果执行某些DML,例如插入到表中,只需在单个DML语句中执行,例如:

    begin
      insert into some_table (some_column)
      select 'a' colname from dual union all
      select 'b' colname from dual;
    end;
    /
    

    如果要用它来做在单个DML语句中无法完成的事情,则需要将值返回到某个对象中。可能是通过光标循环,也可能是返回到集合中,例如:

    begin
      for rec in (select 'a' colname from dual union all
                  select 'b' colname from dual)
      loop
        dbms_output.put_line('colname = '||rec.colname);
      end loop;
    end;
    /
    

    declare
      type t_vals is table of varchar2(1);
      v_vals t_vals;
    begin
      select colname
      bulk collect into v_vals
      from   (select 'a' colname from dual union all
              select 'b' colname from dual);
    end;
    /
    
        2
  •  1
  •   Vahid Farahmandian    6 年前

    TSQL Oracle SQL 两者都是基于 SQL . 但是他们之间有一些不同。与你的问题相关的一个关键区别是 SELECT 声明。

    SQL 说的是 选择 声明至少应采用以下形式:

    SELECT expressions FROM table
    

    软件开发工程师 还为 选择 声明最少。

    在pl/sql中:

    SELECT ... [BULK COLLECT] INTO ... FROM table
    

    但是 TSQL ,更改此规则并说 选择 声明的最低结构如下:

    SELECT expressions
    

    最后,在 软件开发工程师 你需要执行一个 选择 表等关系的语句,但在 TSQL 你可以执行 选择 不使用任何关系的语句。(例如:选择常量)

        3
  •  1
  •   Prashant Vlogs    6 年前

    我想他只是在问如何重写

    SELECT 'a' colName UNION SELECT 'b' colName 

    在pl/sql中。 所以这就是答案

    select 'a' colname from dual union all
    select 'b' colname from dual ;

    Read more