CREATE USER语句中,使用adoquery.Parameters.ParamByName()给字段赋值,出现ORA-01036 非法的变量名/编号(50

  • 主题发起人 主题发起人 步惊云
  • 开始时间 开始时间

步惊云

Unregistered / Unconfirmed
GUEST, unregistred user!
CREATE USER语句中,使用adoquery.Parameters.ParamByName()给字段赋值,出现ORA-01036 非法的变量名/编号(50分)<br />请各位帮忙,我要在oracle中创建用户,
adoquery.sql.close;
adoquery.sql.clear;
adoquery.SQL.Add('CREATE USER :username identified by :password');
adoquery.Parameters.ParamByName('username').Value := Trim(AddUserName.Text);
adoquery.Parameters.ParamByName('password').Value := Trim(AddUserPassword.Text);
adoquery.prepared := true;
结果Oracle报错,ORA-01036 非法的变量名/编号,意思好像是这两个值没有被赋,我如果
改成adoquery.SQL.Add('CREATE USER '+Trim(AddUserName.Text)+' identified by '+Trim(AddUserPassword.Text));
就可以了.
我想可能是因为CREATE USER中用户名和口令不用加单引号,而用Parameters.ParamByName
的方法赋值会自动给所赋的值加上单引号的原因.但只是猜测,有谁碰到过类似的问题?
 
在写SQL语句是一定要注意引号的用法,我以前也遇到过
 
不是,
字段名不可以使用参数,类似于你的语句中的username password等也不可以使用参数
还有delete from tablename,这里tablename也不可以使用参数
参数使用在
insert into table1(f1,f2...) values(:,:...)
update table1 set f1=: where f2=:
select * from table1 where f1=:
在这些情况中,参数的类型都可以根据相应的字段确定
 
tows
你的意思是不是只有DML语言中的字段值才能使用参数赋值的方法?
 
接受答案了.
 
后退
顶部