我在sql plus中创建了一个存储过程,可是报下面错误,请问我哪里错了??
SQL> CREATE OR REPLACE PROCEDURE ObtainPartNumberProc( leftobid in VARCHAR2 ) as
2 V_SQLString VARCHAR2( 100 ) ;
3 BEGIN
4 V_SQLString :='SELECT CLASS2,RIGHT,W2ISBORROWED FROM PDMM31A.ASSMSTRC WHERE LEFT='||leftobid||' ;
5 EXECUTE IMMEDIATE V_SQLString;
6 END ObtainPartNumberProc
7 /
警告: 创建的过程带有编译错误。
------解决方案--------------------
- SQL code
定义一个动态游标作为返回类型,这样才有意义CREATE OR REPLACE PROCEDURE ObtainPartNumberProc( leftobid in VARCHAR2,rst out sys_refcursor) is V_SQLString VARCHAR2( 1000 ) ;BEGIN V_SQLString :='SELECT CLASS2,RIGHT,W2ISBORROWED FROM PDMM31A.ASSMSTRC WHERE LEFT='||leftobid; open rst for V_SQLString;END ObtainPartNumberProc;
------解决方案--------------------
从这个来看,你的版本太低,估计是8i之类的。因为从9i开始才有SYS_REFCURSOR这个默认的弱类型.
如果没有可以这么修改:
定义一个包,然后在包中定义类型
CREATE OR REPLACE PACKAGE "TYPES" as
type refcursor is ref cursor;
end;
CREATE OR REPLACE PROCEDURE obtainpartnumberproc (
leftobid IN VARCHAR2,
rst IN OUT refcursor
)
或者也可以通过其它方式。
------解决方案--------------------
------解决方案--------------------
你创建的是个独立存储过程,运行时不用带TYPES.