Oracle存储过程调用问题。

yelang 2014-01-14 02:04:33
下面是我写的一个创建表和储发器的存储过程,我在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
...全文
280 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
多壮志 2014-01-24
  • 打赏
  • 举报
回复
这种C#问题在C#板块问。 不过印象中,不允许参数带冒号。去掉即可。
_拙计 2014-01-21
  • 打赏
  • 举报
回复
你这过程应该是没问题的,你把调用方法里面的问题吧,参数得:什么意思呢
yelang 2014-01-21
  • 打赏
  • 举报
回复
引用 1 楼 shenlele088 的回复:
调用的语句写下
public bool CreateTables(string wellName,string boiler,string managerArea)
        {
            string tableName = wellName.Replace("-", "JH");
            try
            {
                OracleParameter[] createPara ={
                                                  new OracleParameter(":WellName",OracleType.VarChar,20),
                                                  new OracleParameter(":Table_Name",OracleType.VarChar,20),
                                                  new OracleParameter(":boiler",OracleType.VarChar,15),
                                                  new OracleParameter(":managerarea",OracleType.VarChar,30),
                                              };

                createPara[0].Value = wellName;
                createPara[1].Value = tableName;
                createPara[2].Value = boiler;
                createPara[3].Value = managerArea;
                OracleHelper.ExecuteNonQuery(CommandType.StoredProcedure, "createtable", createPara);
                return true;
            }
            catch (Exception)
            {
               
               return false;
            }
           
          
        }
yelang 2014-01-21
  • 打赏
  • 举报
回复
引用 1 楼 shenlele088 的回复:
调用的语句写下
下面是我的调用语句
public bool CreateTables(string wellName,string boiler,string managerArea)         {             string tableName = wellName.Replace("-", "JH");             try            {                 OracleParameter[] createPara ={                                                   new OracleParameter(":WellName",OracleType.VarChar,20),                                                   new OracleParameter(":Table_Name",OracleType.VarChar,20),                                                   new OracleParameter(":boiler",OracleType.VarChar,15),                                                   new OracleParameter(":managerarea",OracleType.VarChar,30),                                               };                   createPara[0].Value = wellName;                 createPara[1].Value = tableName;                 createPara[2].Value = boiler;                 createPara[3].Value = managerArea;                 OracleHelper.ExecuteNonQuery(CommandType.StoredProcedure, "createtable", createPara);                 return true;             }             catch (Exception)             {                return false;             } 


shenlele088 2014-01-15
  • 打赏
  • 举报
回复
调用的语句写下

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧