在TSQL中写SELECT'a'colName是有效的,在PL / SQL中是什么呢?

时间:2018-07-17 08:07:24

标签: sql-server oracle tsql plsql

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

3 个答案:

答案 0 :(得分:2)

在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;
/

答案 1 :(得分:1)

TSQLOracle SQL都是基于SQL开发的。但是它们彼此之间有一些差异。与您的问题相关的主要区别之一是SELECT语句的最小结构。

SQL说,SELECT语句至少应采用以下形式:

SELECT expressions FROM table

Oracle SQL还至少为SELECT语句定义了相同的规则。

在PL / SQL中:

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

但是TSQL更改了此规则,并说可以最小化构建SELECT语句,如下所示:

SELECT expressions

最后,在Oracle SQL中,您需要针对诸如Table之类的关系执行SELECT语句,但是在TSQL中,您可以不使用任何关系地执行SELECT语句(例如:选择一个常量)

答案 2 :(得分:1)

我认为他只是在问如何重写

SELECT 'a' colName UNION SELECT 'b' colName 

在pl / sql中。 这就是答案

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

Read more