如何在Alias Oracle PL / SQL中使用变量

时间:2018-08-02 21:34:26

标签: oracle plsql

我尝试在别名中使用变量。

是否可以不更改为动态SQL?

例如

get_this_year->这是今年的函数调用,所以是2018年。

CREATE OR REPLACE PROCEDURE do_activity
v_cur_year    VARCHAR2(11);

BEGIN
v_cur_year := get_this_year;


select t.1 AS v_cur_year -- I wanna use in here
FROM table1

END do_activity

如何使用Variable作为别名。

谢谢

1 个答案:

答案 0 :(得分:1)

您要的是不可能的。

解析查询时,必须知道列列表,名称,结构等。解析/编译PL / SQL代码时,将解析PL / SQL中的查询,因此,在您的情况下,将创建过程。 (显然,这不包括在运行时构造的动态查询,因此无法在PL / SQL编译中进行解析。)

您必须使用动态SQL来获取由函数结果定义的列名,但是您已经声明不希望使用动态SQL。

您的代码还有第二个问题,尽管这可能是您简化了代码的结果。您没有在过程中捕获查询结果,这在Oracle PL / SQL中是必需的。您不仅可以运行查询,而且希望通过运行过程来返回查询结果-它不是Transact-SQL。要从PL / SQL返回数据集,您必须编写表格函数(不过,这将需要稳定的数据集结构,因此无需动态列命名),或者您必须使用ref的OUT参数-光标类型。