【发布时间】:2015-07-09 15:21:38
【问题描述】:
我正在尝试在 Oracle 中创建一个存储函数来计算表的行数。我想让表名动态化,所以我将它作为参数传递,存储的函数代码如下所示
create type tes_jml_obj is object(jumlah integer);
create type tes_jml_table is table of tes_jml_obj;
create or replace function jumlahBaris(namatabel varchar)
return tes_jml_table
is
tabel tes_jml_table := tes_jml_table();
begin
for r in (execute immediate 'select count(*) as jumlah from' || namatabel)
loop
tabel.extend;
tabel(1) := tes_jml_obj(r.jumlah);
end loop;
return tabel;
end;
但是当我执行它时,它会返回错误。我在这里错过了什么吗?这是动态获取表格行的正确方法吗?
【问题讨论】:
-
您遇到了什么错误。你肯定也总是想发布错误。
-
我不一定认为这是问题所在,但为了安全起见,您可以将带有连接的 sql 字符串放在括号中:
(execute immediate ('select count(*) as jumlah from ' || namatabel))。另外,在from后面加一个空格(这可能是个问题)。 -
对不起,我的错.. 这里是错误 Error(6,21): PLS-00103: Encountered the symbol "IMMEDIATE" when expecting 以下之一:. ( ) , * @ % & = - + at in is mod 余数 not rem =>
or != or ~= >= and or like2 like4 likec介于 || multiset member submultiset 在“IMMEDIATE”之前插入符号“(”以继续。
标签: oracle stored-procedures plsql stored-functions