CREATE TABLE DEGREE (
NO VARCHAR2(2) NOT NULL, 
NAME VARCHAR2(20) NOT NULL, 
CONSTRAINTPK_DEGREE_NO PRIMARY KEY(NO),
CONSTRAINT UQ_DEGREE_NAME UNIQUE(NAME) 
)CREATE OR REPLACE PROCEDURE INS_DEGREE (p_name degree.name%type)
as
begin
if p_name = '' then 
dbms_output.put_line('请具体的值!');
else
if length(p_name)>10 then
dbms_output.put_line('最多只能输入10个汉字!');
else
insert into degree values (sq_degree.nextval,p_name);
commit;
end if;
end if;
exception
when dup_val_on_index then
dbms_output.put_line('数据库中已经存在了该数据!');
rollback;
when others then
dbms_output.put_line('插入失败,请检查你是否插入了空值!');
rollback;
end ins_degree;private void Button1_Click(object sender, System.EventArgs e)
{
OracleConnection conn = new OracleConnection("data source = scott;user id = scott; password = tiger;");
OracleCommand cmd = new OracleCommand("[ins_degree]",conn);
cmd.CommandType=CommandType.StoredProcedure;
OracleParameter para=cmd.Parameters.Add("p_name",OracleType.VarChar,20);
para.Direction=ParameterDirection.Input;
para.Value="大学";
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}这是我在C#下调用存储过程的代码,但是报错消息为:
ORA-06550: 第 1 行, 第 7 列: PLS-00103: 出现符号 "["在需要下列之一时: begin case declare exit for goto if loop mod null pragma raise return select update while with << close current delete fetch lock insert open rollback savepoint set sql execute commit forall merge pipe 存储过程没问题,是调用语句的问题,在网上搜索了半天,找到了很多调用过程的里子,但是还是没有调用成功,请各位朋友在一个完整的调用语句。谢谢了。

解决方案 »

  1.   

    先看看在oracle中运行存储过程直接赋参数值是否有问题
      

  2.   

    try
    http://blog.csdn.net/web_gus/archive/2004/10/13/134907.aspx
      

  3.   

    在你的存储过程
    变量声明
    下加
    PRAGMA AUTONOMOUS_TRANSACTION;as
    PRAGMA AUTONOMOUS_TRANSACTION;
    begin
      

  4.   

    让存储过程使用独立事务或把你存储过程里的 commit;rollback; 都砍了
      

  5.   

    Oracle 安装目录下有调用的demo
    不过是 oledb 的 vb 代码和VC 的
      

  6.   

    谢谢ZHZUO,推荐的文章很精彩,谢谢了,也谢谢给予建议的朋友!