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

时间:2015-06-29 20:25:51

标签: oracle

我有ORACLE PROCEDURE,我需要在select参数中使用动态表名称,基于参数" a_ID "通过。 但是我在创建程序时遇到了错误。

  

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

任何人都可以帮忙解决这个问题吗? 以下是proc ....

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;

1 个答案:

答案 0 :(得分:0)

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中。 这可能有助于您的程序根据需要执行。