当前位置: 代码迷 >> Oracle开发 >> Oracle存储过程调用有关问题
  详细解决方案

Oracle存储过程调用有关问题

热度:51   发布时间:2016-04-24 06:49:51.0
Oracle存储过程调用问题。
下面是我写的一个创建表和储发器的存储过程,我在Sql Tools1.5里面直接调用就可以正常执行。可是在C#里面一调用就报错,请各位大虾帮忙看看是什么问题,谢谢了。
CREATE OR REPLACE PROCEDURE createtable(WellName IN VARCHAR2,
                                        Table_Name IN VARCHAR2,
                                        boiler IN VARCHAR2,
                                        managerarea IN VARCHAR2) AUTHID current_user AS
  sqlstr VARCHAR2(500);
BEGIN
  sqlstr:='CREATE TABLE '||Table_Name||'(
    cjsj DATE,
    jkgd NUMBER(10,2),
    zryl NUMBER(10,2),
    zqwd NUMBER(10,2),
    zqsd NUMBER(10,2)
  )';
  --Dbms_Output.put_line(sqlstr);
  EXECUTE IMMEDIATE sqlstr;

  sqlstr:='CREATE TABLE '||Table_Name||'_H(
    cjsj DATE,
    jkgd NUMBER(10,2),
    zryl NUMBER(10,2),
    zqwd NUMBER(10,2),
    zqsd NUMBER(10,2)
  )';
  --Dbms_Output.put_line(sqlstr);
  EXECUTE IMMEDIATE sqlstr;

  sqlstr:='CREATE TABLE '||Table_Name||'_D(
    cjsj DATE,
    jkgd NUMBER(10,2),
    zryl NUMBER(10,2),
    zqwd NUMBER(10,2),
    zqsd NUMBER(10,2),
    runhours NUMBER(10)
  )';
  --Dbms_Output.put_line(sqlstr);
  EXECUTE IMMEDIATE sqlstr;

  sqlstr:= 'CREATE OR REPLACE TRIGGER '||Table_Name||'_Tri
  BEFORE INSERT ON '||Table_Name||
  ' FOR EACH ROW
  BEGIN 
    HistoryData('''||Table_Name||''',SYSDATE,:new.zryl,:new.jkgd,:new.zqwd,:new.zqsd);
  END';
  --Dbms_Output.put_line(sqlstr);
  EXECUTE IMMEDIATE sqlstr;

  sqlstr:='INSERT INTO wells(wname,rtable,boiler,managerarea,issteam,tempstop,stoptimes) VALUES ('''||
  WellName||''','''||Table_Name||''','''||boiler||''','''||managerarea||''',''Y'',''N'',0)';
  --Dbms_Output.put_line(sqlstr);
  EXECUTE IMMEDIATE sqlstr;
END; 


下面是在C#里调用的时候C#报出的出错信息:
ORA-06550: 第 1 行, 第 30 列: 
PLS-00103: 出现符号 ":"在需要下列之一时:
 ( - + case mod new not null
   <an identifier> <a double-quoted delimited-identifier>
   <a bind variable> continue avg count current exists max min
   prior sql stddev sum variance execute forall merge time
   timestamp interval date
   <a string literal with character set specification>
   <a number> <a single-quoted SQL string> pipe
   <一个带有字符集说明的可带引号的字符串文字>
   <一个可带引号的 SQL 字符串> purge
符号 "(在 ":" 继续之前已插入。
ORA-06550: 第 1 行, 第 55 列: 
PLS-00103: 出现符号 ":"在需要下列之一时:
 ( - + case mod new not null
   <an identifier> <a double-quoted delimited-identifier>
   <a bind variable> continue avg count current exists max min
   prior sql stddev sum variance execute foral
ORA-06550: 第 1 行, 第 78 列: 
PLS-00103: 出现符号 ":"在需要下列之一时:
 ( - + case mod new not null
   <an identifier> <a double-quoted delimited-identifier>
   <a bind variable> continue avg count cur

------解决方案--------------------
调用的语句写下
------解决方案--------------------
你这过程应该是没问题的,你把调用方法里面的问题吧,参数得:什么意思呢
------解决方案--------------------
这种C#问题在C#板块问。
不过印象中,不允许参数带冒号。去掉即可。
  相关解决方案