【问题标题】:Error(20,28): PL/SQL: ORA-00942: table or view does not exist错误(20,28):PL/SQL:ORA-00942:表或视图不存在
【发布时间】:2015-09-16 11:04:45
【问题描述】:

我有 ORACLE PROCEDURE,我需要根据传递的参数“a_ID”在选择查询中使用动态表名。 但我在创建程序时遇到错误。

错误(20,28):PL/SQL:ORA-00942:表或视图不存在

谁能帮忙解决这个问题? 下面是过程......

CREATE OR REPLACE 
PROCEDURE  IsTrue
(
  AppID IN VARCHAR2,
  a_ID IN VARCHAR2,
  l_ID VARCHAR2, 
  return_value out CHAR
)
AS

v_sql VARCHAR(3000);
v_tablename VARCHAR(30);

BEGIN

SELECT decode(a_ID,'LS','LSAPP','MR','MRAPP','RV','RVAPP','APP') INTO v_tablename FROM dual;

  SELECT CASE
    WHEN EXISTS (SELECT 1 
                      FROM v_tablename
                      WHERE APPID = AppID
                         AND LID <> l_ID) 
                THEN 'Y'
                ELSE 'N'
    END AS RECORD_EXISTS
    FROM DUAL;

EXECUTE IMMEDIATE v_sql INTO return_value;

END;

【问题讨论】:

标签: oracle


【解决方案1】:
CREATE OR REPLACE PROCEDURE IsTrue (argAppID IN VARCHAR2, a_ID IN VARCHAR2, l_ID VARCHAR2, return_value out CHAR ) 
AS
v_sql VARCHAR(3000); 
v_tablename VARCHAR(30);
BEGIN
SELECT decode(a_ID,'LS','LSAPP','MR','MRAPP','RV','RVAPP','APP') INTO v_tablename FROM dual;
v_sql := 'SELECT CASE WHEN EXISTS (SELECT 1 FROM ' || v_tablename || ' WHERE APPID = '''|| argAppID ||''' AND LID <> '''|| l_ID || ''') THEN ''Y'' ELSE ''N'' END AS RECORD_EXISTS FROM DUAL';
EXECUTE IMMEDIATE v_sql INTO return_value;
END;

在您的过程中,第二行创建为动态 sql 并存储在 v_sql 中。 这可能有助于您根据需要执行程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-23
    • 2019-01-22
    • 2013-04-14
    • 2019-09-29
    • 2019-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多