我已经在TOAD / PLSQL中运行了此过程,但是希望将第一列的别名设置为传递给该过程的field_name参数。我想我需要将查询构建为像这样的字符串,
query := 'Select 1 as ' || field_name || ' From Dual';
但是我做错了。我的想法有可能吗?
谢谢,下面是我要修改的工作代码。
Create or Replace Procedure Delete_Me(field_name NVarChar2)
as
result_set sys_refcursor;
BEGIN
open result_set for
Select
Elapsed_Time((Select Start_Time From Temp_Time1)) as field_name
,To_Char(SysDate, 'HH12:MI:SS AM') as Time_Completed
,Elapsed_Time((Select Start_Time From Temp_Time0)) as Process_So_Far
From
Dual;
DBMS_SQL.RETURN_RESULT(result_set);
End;
评论后:
我向过程传递了一个字符串,并将其值放在“ field_name”中。我希望第一列的别名采用field_name的值。因此,如果我这样调用程序:
BEGIN
DeleteMe('Random_Column_Name');
END;
第一列名称将被称为“ Random_Column Name”。如果我这样调用程序:
BEGIN
DeleteMe('Different_Column_Name');
END;
第一列将是名称“ Different_Column_Name”。
在德米特里(Dmitry)的第二条评论之后: 没什么意思这是我尝试并未能成功工作的一个示例。
答案 0 :(得分:0)
我知道您需要进行动态查询,这种方式很有趣:
DECLARE
TYPE ty_refcur IS REF CURSOR;
c_mycur ty_refcur;
whatever varchar2(200) := 'whatever';
my_query varchar2(500);
BEGIN
my_query := 'Select ''hello''as '||whatever||' from dual';
OPEN c_mycur FOR my_query;
--whatever you want to do
CLOSE c_mycur;
END;
答案 1 :(得分:0)
这就是我最终想出的。斯坦尼米尔(Stanimir)帮助我了解了变量的使用方式。谢谢你!
Create or Replace Procedure Report_Elapsed_Time(field_name0 NVarChar2,
field_name1 NVarChar2)
as
result_set sys_refcursor;
query VarChar2(30000);
BEGIN
query := 'Select
Elapsed_Time((Select Start_Time From Temp_Time1)) as ' || Replace(field_name0, ' ', '_') || '
,To_Char(SysDate, ''HH12:MI:SS AM'') as Time_Completed
,Elapsed_Time((Select Start_Time From Temp_Time0)) as ' || Replace(field_name1, ' ', '_') || '
From
Dual';
open result_set for query;
DBMS_SQL.RETURN_RESULT(result_set);
End;