【问题标题】:Store Procedure hit SQL Statement IgnoredSQL 语句中的存储过程被忽略
【发布时间】:2018-03-20 06:37:53
【问题描述】:
create or replace PROCEDURE GEN_STATEMENT_SP(indexNM IN VARCHAR2, tableNM IN VARCHAR2) AS
BEGIN 
DECLARE
uniqueSTMT  VARCHAR2(30);
nonUniqueSTMT VARCHAR2(30);
charOn VARCHAR2(5);
tempfld VARCHAR2(500) ;

CURSOR chkTyp IS(SELECT ES_UNIQUENESS from sys.dba_ind_columns where INDEX_NAME = indexNM and TABLE_NAME = tableNM);
CURSOR tblColumn IS(SELECT INDEX_NAME,listagg(COLUMN_NAME, ',') WITHIN GROUP (ORDER BY COLUMN_POSITION) COLUMN_NAME FROM sys.dba_ind_columns where INDEX_NAME = indexNM and TABLE_NAME = tableNM GROUP BY INDEX_NAME);

BEGIN

uniqueSTMT := 'CREATE UNIQUE INDEX';
nonUniqueSTMT := 'CREATE INDEX';
charOn := 'on';

if chkTyp.ES_UNIQUENESS = 'UNIQUE' then

   tempfield := uniqueSTMT || indexNM || charOn || tableNM || '(' || tblColumn.COLUMN_NAME || ')' ;
   DBMS_OUTPUT.put_line(tempfld);
end if;
END;
END;
/

错误列表:

LINE/COL ERROR
-------- ------------------------------------------------------------------
9/17     PL/SQL: SQL Statement ignored
9/48     PL/SQL: ORA-00942: table or view does not exist
10/20    PL/SQL: SQL Statement ignored
10/126   PL/SQL: ORA-00942: table or view does not exist
18/1     PL/SQL: Statement ignored
18/11    PLS-00225: subprogram or cursor 'CHKTYP' reference is out of scope

大家好,当我尝试在上面创建示例存储过程时。我打了 SQL 语句被忽略了。 在这方面需要一些帮助,非常感谢。

【问题讨论】:

  • 运行 show errors 然后 edit 你的问题并添加你看到的完整错误。
  • 嗨朋友,上面添加了show_error。

标签: oracle stored-procedures indexing concatenation sql-insert


【解决方案1】:

您无权访问 DBA_ 视图(由 SYS 拥有)。你真的需要那些吗?请改用USER_IND_COLUMNS。使该代码工作后,进一步扩展它(如有必要)。

由于 CHKTYP 使用不当:您声明了一个游标,但从未对其进行任何操作(打开、获取、...、关闭)。另一方面,为什么要使用游标?这些是返回单个值的SELECT 语句(除非我错了),所以它们可能是普通的SELECTs(但是是的,您可能必须处理可能的NO-DATA-FOUND 异常)。

此外,USER_IND_COLUMNS 视图中没有 ES_UNIQUENESS 列;应该做什么?它存在于USER_INDEXES,但被称为UNIQUENESS,没有ES_前缀。

很快,您需要重写该代码。循序渐进,经常测试。确定第一步成功后,进行下一步。

【讨论】:

  • 我的朋友,DBMS_OUTPUT.put_line(tempfield);
  • 我必须在哪里查看返回值?
  • DBMS_OUTPUT 需要启用 SERVEROUTPUT。在 SQL*Plus 或 SQL Developer 中,您将执行 set serveroutput on
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-10
  • 1970-01-01
  • 1970-01-01
  • 2016-07-19
  • 2012-11-22
  • 1970-01-01
  • 2017-09-22
相关资源
最近更新 更多