首页 文章

使用oracle中的Dynamic SQL语句访问另一个模式的表

提问于
浏览
0
CREATE OR REPLACE PROCEDURE DYN_TAB(TABLE_NAME IN VARCHAR2) AS
BEGIN
   EXECUTE IMMEDIATE 'SELECT * FROM ILX2012_KMDEPOT.AOI' || TABLE_NAME ||
                                                            '_TOCINSTANCE';
END DYN_TAB;

它显示以下错误

ORA-00942: table or view does not exist

如何在不使用数据链接的情况下从另一个实例的一个实例访问oracle表 .

对困惑感到抱歉

下面是静态sql查询,它运行正常,我在KMDPO中运行以下查询,这是一个模式,ILX2012_KMDEPOT是另一个模式,两者都在同一个数据库中 .

SELECT * FROM ILX2012_KMDEPOT.AOI659_TOCINSTANCE;

1 回答

  • 0

    让我们尝试几种不同的方式,看看出了什么问题 . 首先,尝试以下方法:

    DECLARE
      csrStatic  CURSOR FOR SELECT * FROM ILX2012_KMDEPOT.AOI659_TOCINSTANCE;
      aRow       ILX2012_KMDEPOT.AOI659_TOCINSTANCE%ROWTYPE;
      nRowcount  NUMBER := 0;
    BEGIN
      OPEN csrStatic;
    
      LOOP
        FETCH csrStaticINTO aRow;
        EXIT WHEN csrStatic%NOTFOUND;
    
        nRowcount := nRowcount + 1;
      END LOOP;
    
      CLOSE csrStatic;
    
      DBMS_OUTPUT.PUT_LINE(nRowcount || ' rows fetched');
    END;
    

    如果可行,请运行以下命令:

    DECLARE
      csrDynamic SYS_REFCURSOR;
      aRow       ILX2012_KMDEPOT.AOI659_TOCINSTANCE%ROWTYPE;
      nRowcount  NUMBER := 0;
    BEGIN
      OPEN csrDynamic for 'SELECT * FROM ILX2012_KMDEPOT.AOI659_TOCINSTANCE';
    
      LOOP
        FETCH csrDynamic INTO aRow;
        EXIT WHEN csrDynamic%NOTFOUND;
    
        nRowcount := nRowcount + 1;
      END LOOP;
    
      CLOSE csrDynamic;
    
      DBMS_OUTPUT.PUT_LINE(nRowcount || ' rows fetched');
    END;
    

    如果上述方法有效,请尝试以下方法:

    DECLARE
      csrDynamic    SYS_REFCURSOR;
      strTablename  VARCHAR2(100) := '659';
      aRow          ILX2012_KMDEPOT.AOI659_TOCINSTANCE%ROWTYPE;
      nRowcount     NUMBER := 0;
    BEGIN
      OPEN csrDynamic for 'SELECT * FROM ILX2012_KMDEPOT.AOI' ||
                          strTablename || '_TOCINSTANCE';
    
      LOOP
        FETCH csrDynamic INTO aRow;
        EXIT WHEN csrDynamic%NOTFOUND;
    
        nRowcount := nRowcount + 1;
      END LOOP;
    
      CLOSE csrDynamic;
    
      DBMS_OUTPUT.PUT_LINE(nRowcount || ' rows fetched');
    END;
    

    尝试所有三个,看看产生了什么错误(如果有的话) .

    分享和享受 .

相关问题