使用过程

时间:2017-10-25 07:32:38

标签: oracle stored-procedures plsql plsqldeveloper

我创建了一个过程,它需要动态SQL块。

程序如下,符合正确但当我尝试运行它时,它会给出以下错误。

我试图对这里使用的所有变量使用cast()。但这没有用。

另外,我正在尝试使用SQL - Developer工具在Oracle上运行此过程。

一旦动态SQL存储在sqlquery变量中,我会尝试运行动态查询并显示其结果!

**Output**
*Connecting to the database XXX.
ORA-06502: PL/SQL: numeric or value error: character to number conversion error
ORA-06512: at "XXX.PROCEDURE2", line 28
ORA-06512: at line 6
Who are you ? 
Process exited.
Disconnecting from the database XXX.*

程序

*create or replace PROCEDURE PROCEDURE2 (var_owner IN dba_tab_cols.owner%TYPE) AS
CURSOR col_ident IS 
  select col1_name,col2,col3,col4,nullable,'_NM' as s_type
  from table_name 
  where col2 in var_owner 
    and col3 like 'exp%%' 
    and col4 like 'exp2%';

sample_record col_ident%ROWTYPE;
BEGIN
OPEN col_ident;
LOOP 
FETCH col_ident INTO sample_record;
  DECLARE
  col_nm VARCHAR2(30);
  tab_nm VARCHAR2(30);
  schema_nm VARCHAR2(30);
  --a1 VARCHAR2(30);
  sqlquery VARCHAR2(400);

  BEGIN

  col_nm := sample_record.col2;
  tab_nm := sample_record.col3;
  schema_nm := sample_record.col1_name;
  IF sample_record.col4 = 'VARCHAR2' THEN
  DBMS_OUTPUT.PUT_LINE('Who are you ? ');
 sqlquery:= ('select distinct ' +col_nm+ 'from' + schema_nm+'.'+tab_nm + 'where rownum < 1');
  DBMS_OUTPUT.PUT_LINE('Do you know me ');
  END IF;
EXIT WHEN col_ident%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(sample_record.col1_name||','||sample_record.col3
  ||','||sample_record.col2||','||sample_record.col4||','||
  sample_record.col5||','||sample_record.nullable||','||
  sample_record.s_type);
  END;
END LOOP;
--Close CURSOR col_ident
CLOSE col_ident;
END PROCEDURE2;*

0 个答案:

没有答案