我尝试在别名中使用变量。
是否可以不更改为动态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作为别名。
谢谢
答案 0 :(得分:1)
您要的是不可能的。
解析查询时,必须知道列列表,名称,结构等。解析/编译PL / SQL代码时,将解析PL / SQL中的查询,因此,在您的情况下,将创建过程。 (显然,这不包括在运行时构造的动态查询,因此无法在PL / SQL编译中进行解析。)
您必须使用动态SQL来获取由函数结果定义的列名,但是您已经声明不希望使用动态SQL。
您的代码还有第二个问题,尽管这可能是您简化了代码的结果。您没有在过程中捕获查询结果,这在Oracle PL / SQL中是必需的。您不仅可以运行查询,而且希望通过运行过程来返回查询结果-它不是Transact-SQL。要从PL / SQL返回数据集,您必须编写表格函数(不过,这将需要稳定的数据集结构,因此无需动态列命名),或者您必须使用ref的OUT
参数-光标类型。