如果我用TSQL编写SELECT 'a' colName UNION SELECT 'b' colName
,它将返回一个临时表形式,以后我可以在存储过程中使用它,以及PL / SQL中的替代形式是什么?
答案 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)
TSQL
和Oracle 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 ;