标签: plsql

动态 SQL 不存在绑定变量

我正在使用动态 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 …

sql plsql dynamic-sql

-3
推荐指数
1
解决办法
5315
查看次数

需要以这样一种方式实现以下查询:我们不应该编写这么大的查询

我们需要以这样一种方式实现以下查询:我们不应该编写这么大的查询,而应该通过过程,函数或匿名块来实现它(我们能做什么)

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)

sql oracle plsql

-4
推荐指数
1
解决办法
159
查看次数

-4
推荐指数
1
解决办法
2685
查看次数

性能问题-集合会提高性能吗?

我遇到了性能问题,也许您可​​以帮忙。当我打开游标时,然后运行其他几个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)

oracle performance plsql query-optimization

-4
推荐指数
1
解决办法
63
查看次数

我们如何逐行打印字符并将其保存到PLSQL中的csv或文本文件中

  1. 宣布
  2. V_NUMBER NUMBER:= 23;
  3. 开始
  4. V_NUMBER:= V_NUMBER + 1;
  5. 退出时V_NUMBER:= 25;
  6. - 用于打印和将行嵌套到CSV或TEXT文件中的一些功能.
  7. 结束循环;
  8. 承诺;
  9. 结束;

sql plsql plsqldeveloper

-5
推荐指数
1
解决办法
485
查看次数