我正在使用动态 sql 和 pl/sql,我的想法是至少为小尺寸表的行创建通用打印程序。为了使程序正常工作,我需要找到某些列的值,因此我使用了动态 sql。查找数据的函数具有以下代码:
function find_value(p_table_name string, p_id_name string, p_id string, p_field string)
return varchar2
as
rresult varchar2(50) := '';
query_str varchar2(200);
type cur_typ is ref cursor;
c cur_typ;
inv_num number;
begin
query_str := 'select '||p_field||' from '||p_table_name||' where '||p_id_name||' = '||p_id;
open c for query_str using inv_num;
loop
fetch c into rresult;
exit when c%notfound;
end loop;
close c;
return to_char(rresult);
end;
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
从第 2 行开始出错 - BEGIN --PROBNI_RED := JOB_PKG.GET_EMPLOYEE(100);
PPRINT.PRINT('EMPLOYEES','EMPLOYEE_ID',100); 结尾; 错误报告 - ORA-01006:绑定变量不存在 ORA-06512:在“ORA01.PPRINT”,第 14 …
我们需要以这样一种方式实现以下查询:我们不应该编写这么大的查询,而应该通过过程,函数或匿名块来实现它(我们能做什么)
wk_units1-105是列名cnt_sls_dm.fct_sales_summary表名.我们正在比较同一个表中的数据,但a.fct_sales_summary的第2周与b.fct_sales_summary
的第1周进行比较
简而言之,我们需要在pl/sql中创建一些东西以应用以下功能(我是仪式)
SELECT DISTINCT A.bio_id ,
DECODE(A.wk_units2 - B.wk_units1,0,NULL,A.wk_units2) prev,
DECODE(A.wk_units2 - B.wk_units1,0,NULL,B.wk_units1) curr,
DECODE(A.wk_units3 -B.wk_units2,0,NULL,A.wk_units3) prev,
DECODE(A.wk_units3 -B.wk_units2,0,NULL,B.wk_units2) curr,
DECODE(A.wk_units4 -B.wk_units3,0,NULL,A.wk_units4) prev,
DECODE(A.wk_units4 -B.wk_units3,0,NULL,B.wk_units3) curr,
DECODE(A.wk_units5 -B.wk_units4,0,NULL,A.wk_units5) prev,
DECODE(A.wk_units5 -B.wk_units4,0,NULL,B.wk_units4) curr,
DECODE(A.wk_units6 -B.wk_units5,0,NULL,A.wk_units6) prev,
DECODE(A.wk_units6 -B.wk_units5,0,NULL,B.wk_units5) curr
. . .
. . .
. . .
DECODE(A.wk_units105 -B.wk_units104,0,NULL,A.wk_units105) prev,
DECODE(A.wk_units105 -B.wk_units105,0,NULL,B.wk_units104) curr
FROM
cnt_sls_dm.fct_sales_summary A,
cnt_sls_dm.fct_sales_summary B
WHERE
A.bio_id=B.bio_id AND A.bio_id<>0
AND ROWNUM<25
AND ( A.wk_units2<> B.wk_units1
OR A.wk_units3<> B.wk_units2
OR A.wk_units4<> B.wk_units3
OR A.wk_units5<> B.wk_units4
OR …Run Code Online (Sandbox Code Playgroud) 如何使用 Oracle SQL 或 PL/SQL 实现以下功能?

我遇到了性能问题,也许您可以帮忙。当我打开游标时,然后运行其他几个SELECT语句以使用游标中的变量来检索值(请参见下文)。这似乎减慢了整个过程。我认为这是因为PL / SQL和SQL引擎之间的切换。使用表集合会有所帮助吗?但是,正如我所看到的,由于我需要来自不同表的不同列,因此我需要具有多个不同的集合,如何在一条记录中输出所有内容以返回结果集?
CREATE OR REPLACE procedure sp_test (in_input in number)
as
v_calc number;
v_calc_res number;
v1 number;
v2 number;
v3 number;
CURSOR C_test IS
select col1 from test where col1 = in_input;
begin
open c_test
loop
fetch c_test into v_calc;
select col1 into v1 from t1;
select col1 into v2 from t2;
select col1 into v3 from t3;
v_calc_res := v_calc * 5 * v1 * v2 * v3;
dbms_output.put_line(v_calc_res);
end loop;
end sp_test;
/
Run Code Online (Sandbox Code Playgroud)