向数据库中写入数字时出现ORA-02036错误的原因

    技术2022-05-19  27

            我一般用Delphi中的SQLQuery这个控件执行SQL语句,最近遇到一个问题:

            先讲环境:Oracle 9i,Delphi7。

            数据表中的字段有Varchar2型的(name字段),也有integer型的(num字段)。SQL语句如下:

    SQLQuery1.SQL.Text := 'insert into mytable (name,number) values(:name,:number)'; SQLQuery1.ParamByName('name').Value := 'jone'; SQLQuery1.ParamByName('num').Value := 100; SQLQuery1.ExecSQL;        

    这几行语句一执行就出现Ora-02036错识,说什么illegal variable name/number,搞半天不知道怎么回事。因我这样想:name是Varchar2型的,用字符串是没错的,那num是integer,直接用数字100应该是没错的了。但,就是出错,要命,上网也不知为什么,最后才发现,如果把SQLQuery1.ParamByName('num').Value := 100; 改为SQLQuery1.ParamByName('num').Value := inttostr(100); 那就没问题了。

    原来是我自己多想了,就算num是integer类型的,也是当字符串来对待。

     

     

    另注意一点,如果用这样的语句:SQLQuery1.ParamByName('name').Value := SQLQuery2.FieldByName('xingming').Value 。那么如果 SQLQuery2.FieldByName('xingming').Value的值是空的时候,就会出现不能插入空值的错误,所以如果xingming字段可能有空值时,最好用SQLQuery1.ParamByName('name').Value := SQLQuery2.FieldByName('xingming').AsString 。这样,就算有空值,也可以正常写入。

     

    怕忘记了,写下来,好记住。


    最新回复(0)