sql - Oracle插入中缺少逗号
问题描述
我必须在 powershell 脚本的帮助下从证书中提取一些数据,然后将所述数据插入到 oracle 数据库中。
现在我似乎遇到了 oracle 语法的一些问题,因为某些数据包含逗号和双引号。我的代码(扣除)如下所示:
Add-Type -Path "C:\Program Files (x86)\oracle\instantclient_odac_12_32\odp.net\managed\common\Oracle.ManagedDataAccess.dll"
$CRTARR = Get-ChildItem Cert:\CurrentUser\My #just for testing purposes
$date = $CRTARR[0].NotAfter
$ActiveConnection = [Oracle.ManagedDataAccess.Client.OracleConnection]::new()
$ActiveConnection .ConnectionString = "Data Source=SOURCE;User USER;Password=PASSWORD"
$eins = $CRTARR[0].SerialNumber
$zwei ="'"+ $CRTARR[0].Issuer +"'"
$String = $CRTARR[0].Subject
$SSTRING = @($String.Split('"'))
$FINAL ="'"+ $SSTRING[0] + "'" + '"' + $SSTRING[1] + '"' + "'" + $SSTRING[2] + "'"
$drei = $FINAL
$vier = $Date.ToString("MM\/dd\/yyyy hh:mm:ss")
$fuenf = "0"
$sechs = $CRTARR[0].Subject -replace "[^0-9]"
$sechs = $sechs.trim('0')
$query = "insert into TABLENAME (VALUEONE, VALUETWO, VALUETHREE, VALUEFOUR, VALUEFIVE, VALUESIX) values (" + $eins + " , " + $zwei +" , "+ $drei +" , "+ $vier +" , "+ $fuenf +" , "+ $sechs +")"
$ActiveConnection.open()
$command = $ActiveConnection.CreateCommand()
$command.CommandType = [System.Data.CommandType]::Text
$command.CommandText = $query
$command.ExecuteNonQuery()
查询看起来像这样
echo $query
insert into TABLENAME (VALUEONE, VALUETWO, VALUETHREE, VALUEFOUR, VALUEFIVE, VALUESIX) values (0C87B3 , "CN=SOMECN, OU=OU WITH SPACES, O=ORGANIZATION WITH SPACES, C=DE" , "SERIALNUMBER=NUMBER, SN=
NAME, G=NAME, CN='"NAME, USER"', O=ORGANIZATION WITH SPACES, C=DE" , 07/02/2027 09:49:35 , 0 , 98915)
(我审查了代码,但格式是一样的。)
Oracle 抛出以下错误
ORA-00917: 缺少逗号
现在我找不到缺少的逗号,有人可以帮忙吗?
提前致谢
解决方案
您应该始终使用参数。(为什么?)
$query = @"
insert into TABLENAME (VALUEONE, VALUETWO, VALUETHREE, VALUEFOUR, VALUEFIVE, VALUESIX)
values (:eins, :zwei, :drei, :vier, :fuenf, :sechs)
"@
$command.Parameters.Add("eins", $eins)
$command.Parameters.Add("zwei", $zwei)
$command.Parameters.Add("drei", $drei)
$command.Parameters.Add("vier", $vier)
$command.Parameters.Add("fuenf", $fuenf)
$command.Parameters.Add("sechs", $sechs)
这也将解决您的杂散引号和逗号问题。
推荐阅读
- c - 使用 C 中的 Curses 保存字符串和 N 行历史记录的连续键盘输入
- javascript - 循环遍历两个数组值的替换 innerhtml 数组
- jmeter - 为什么我的 JSON 值在 Jmeter 中重复?
- delphi - 为什么这个检查字符串中是否有非法字符的测试会一直显示为假,即使它应该是真的?
- python - 如何使用 Tensorflow 使用带有自定义损失的分布式训练?
- php - 如何将 `request()->input()` 附加到 GET 表单操作
- java - mvn jetty:run 只构建项目,不启动服务器
- c# - C# ToolStripProfessionalRender,事件 OnRenderItemText 仅应用于第一项
- python - 使用管道转换数据后,cross_val_predict 不会产生相同数量的变量
- php - 通过 JSON 发送时 PATHINFO_EXTENSION 不起作用