通常情况下,ASP.Net(我认为它正在做它)会在调用程序时用单引号做出魔法。例如,以下内容可以正常工作......
dim aThing as string = "you're not as cool as your dog"
...
cmd.CommandText = "pkg_cool.s_you"
cmd.Parameters.Add(New OracleParameter("iSomeVar", OracleDbType.Varchar2)).Value = aThing
cmd.executeNonQuery()
该软件包具有简单的更新查询
insert into someTable (colName)values(iSomeVar)
现在,如果我在ASP中执行相同的操作,但是将包更改为使用execute immediate
,则需要对单引号进行转义;我是在asp replace(aThing,"'","''")
中做到的。有人可以解释原因吗?
-- the following will work fine if the asp variable "aThing" does not contain an apostrophe.
execute immediate
'insert into ' || vTableName || '(' || colName || ')values(''' || iSomeVar || ''')';
SQL Error: ORA-00917: missing comma
答案 0 :(得分:1)
它是逃避撇号的RDBMS(关系数据库管理系统),而不是.NET。我猜execute immediate
使用文字字符串,因为它是为汇编动态SQL而设计的。