比如我这么写:
--创建存储过程
CREATE OR REPLACE PROCEDURE P_Tmp_GrpByLctnTLbl

    I_Month_No IN tbas.mk_user.month_no%TYPE;    
    I_Tbl_ServId IN TABLE 
    (
        tbas.mk_user.serv_id%TYPE
    ) 
)
AS
BEGIN
……
END;--像这样调用
CALL Mk.p_Tmp_Grpbylctntlbl(201102, mk.tbl_tmp_hghlvlusr);创建过程成功,调用时总是说表名那有错?
哪位高人指导下要怎么写啊?

解决方案 »

  1.   

    没明白你想做什么mk.tbl_tmp_hghlvlusr你这个是什么参数啊?
      

  2.   

    直接传table没见过 
    考虑type或是游标
      

  3.   


        I_Month_No IN tbas.mk_user.month_no%TYPE,    
      

  4.   

    要么你的入参 不应该是你的表名或是表的字段  应该是个结果集 
    通过table函数调用我说的type 是 
    CREATE   [OR   REPLACE]   TYPE   <typename>   AS   OBJECT(attribute1   datatype,   :   attributeN   datatypeMEMBER   PROCEDURE   <methodname>   (parameter,   mode,   datatype),MEMBER   FUNCTION   <methodname>   (parameter,   mode,   datatype)   RETURN   datatype,PRAGMA   RESTRICT_REFERENCES   (<methodname>,WNDS/RNDS/WNPS/RNPS));   
      

  5.   

    情况是这样的:
    有好几个有相同列的表,要对它们进行相同的操做
    不想让代码太多,除了动态SQL还有什么好办法?
      

  6.   

    一定要动态啊   多写几条静态sql  在一个procedure里保证他们同步就行了啊 
      

  7.   

    打错了 是不一定要动态sql
    呵呵 
    给个建议 
    把所有的表名  查到一个游标里 
    然后动态拼接动态sql
    然后执行 
    代码量应该较小 不然 每个表写个静态sql
    代码量大 
    你自己选
      

  8.   

    定义RECORD 吧参考
    http://hi.baidu.com/xujingood/blog/item/0cd351830284f0ab0df4d241.html