例如CREATE OR REPLACE PROCEDURE SPGetConsumptionTax
(
  ...
  P_vDBLink IN VARCHAR,       --DBLink名称
) IS
BEGIN
  SELECT * FROM ZCMMHSHOHZEIRITSU@ P_vDBLink
END;P_vDBLink是参数,编译不通过,有啥办法吗?

解决方案 »

  1.   

    编译通不过是因为SELECT 要用SELECT INTO.
    要么就是定义在游标里,你这么写肯定通不过的.
      

  2.   

    用动态sql
    CREATE OR REPLACE PROCEDURE SPGetConsumptionTax
    (
      ...
      P_vDBLink IN VARCHAR      --DBLink名称

    IS
      v_SQL_STR VARCHAR2(200);
    BEGIN
      v_SQL_STR := 'SELECT * FROM ZCMMHSHOHZEIRITSU@ '||P_vDBLink ;
      EXECUTE IMMEDIATE v_SQL_STR ;
    END;
      

  3.   

    CREATE OR REPLACE PROCEDURE SPGetConsumptionTax
    (
      ...
      P_vDBLink IN VARCHAR,       --DBLink名称
    ) IS
    v_sql varchar2(255);
    BEGIN
      v_sql:='SELECT * FROM ZCMMHSHOHZEIRITSU@' || P_vDBLink;
      execute immediate v_sql;
    END;