Oracle 中缺少 IN 或 OUT 参数 SQL
Missing IN or OUT parameter in Oracle SQL
我在 SQL{ "U" = UPPER(:codigo) } 的这一部分遇到错误。当我删除变量并将 :codigo 硬编码为 u 或 U 时,它工作正常。我收到的错误是缺少输入或输出参数。我在 Oracle 12c 服务总线上收到此错误
完整 SQL:
SELECT Resultado_Ensaio.Amos_Cd_Tipo_Local, Resultado_Ensaio.Amos_Cd_Loc_Amostg, Resultado_Ensaio.Prod_Cd_Id, Resultado_Ensaio.Amos_Dh_Amostra,
Resultado_Ensaio.Reen_Md_Res_Num, Componente_Gas_Nat.Cpgn_Nm_Abreviado,
Caract_Produto.Capr_Nm_Completo,
Unidade_Medida_Emq.Unme_Sg_Notacao, Metodo_Ensaio.Prme_Cd_Id, Metodo_Ensaio.Meen_Cd_Id,
Resultado_Ensaio.Reen_Cd_Res_Alfa_E, Resultado_Ensaio.Tiam_Cd_Id, Caract_Produto.Capr_Cd_Comp_Carac,
Caract_Produto.Capr_Cd_Id
, Ce.AMOS_NR_CERT_QUAL, Ce.AMOS_DT_CERT_QUAL
FROM Caract_Produto
INNER JOIN Resultado_Ensaio ON (Caract_Produto.Capr_Cd_Id = Resultado_Ensaio.Capr_Cd_Id
AND Caract_Produto.Capr_Cd_Comp_Carac = Resultado_Ensaio.Capr_Cd_Comp_Carac
AND Caract_Produto.Grcp_Cd_Id = Resultado_Ensaio.Grcp_Cd_Id)
INNER JOIN Metodo_Ensaio ON (Metodo_Ensaio.Meen_Cd_Id = Resultado_Ensaio.Meen_Cd_Id
AND Metodo_Ensaio.Prme_Cd_Id = Resultado_Ensaio.Prme_Cd_Id)
INNER JOIN Unidade_Medida_Emq Unidade_Medida_Emq ON (Unidade_Medida_Emq.Gume_Cd_Id = Resultado_Ensaio.Gume_Cd_Id
AND Unidade_Medida_Emq.Unme_Cd_Id = Resultado_Ensaio.Unme_Cd_Id)
LEFT JOIN Caract_Produto_Componente ON (Caract_Produto_Componente.Grcp_Cd_Id = Resultado_Ensaio.Grcp_Cd_Id
AND Caract_Produto_Componente.Capr_Cd_Id = Resultado_Ensaio.Capr_Cd_Id
AND Caract_Produto_Componente.Capr_Cd_Comp_Carac = Resultado_Ensaio.Capr_Cd_Comp_Carac)
LEFT JOIN Componente_Gas_Nat ON (Caract_Produto_Componente.Cpgn_Cd_Id = Componente_Gas_Nat.Cpgn_Cd_Id)
LEFT JOIN Certificado_Ensaio Ce ON (Resultado_Ensaio.Amos_Cd_Loc_Amostg = Ce.Amos_Cd_Loc_Amostg
AND Resultado_Ensaio.Amos_Cd_Tipo_Local = Ce.Amos_Cd_Tipo_Local
AND Resultado_Ensaio.Amos_Dh_Amostra = Ce.Amos_Dh_Amostra
AND Resultado_Ensaio.Tiam_Cd_Id = Ce.Tiam_Cd_Id
AND Resultado_Ensaio.Prod_Cd_Id = Ce.Prod_Cd_Id
AND Resultado_Ensaio.Prco_Cd_Comp_Prod = Ce.Prco_Cd_Comp_Prod
AND Resultado_Ensaio.Orga_Cd_Cbi_Exec = Ce.Orga_Cd_Cbi_Exec)
WHERE
Resultado_Ensaio.Amos_Cd_Tipo_Local = (:tipo)
--------------AND ('U' = UPPER(:posicao) AND-------------------------------
Resultado_Ensaio.Amos_Dh_Amostra = (
SELECT MAX(Reen2.Amos_Dh_Amostra)
FROM Resultado_Ensaio Reen2
WHERE Resultado_Ensaio.Amos_Cd_Loc_Amostg = Reen2.Amos_Cd_Loc_Amostg
AND Resultado_Ensaio.Amos_Cd_Tipo_Local = Reen2.Amos_Cd_Tipo_Local
AND Reen2.Amos_Dh_Amostra <= TO_TIMESTAMP('1999-11-01 07:00', 'YYYY-MM-DD HH24:MI:SS')
)
OR
------------------'P' = UPPER(:posicao) AND--------------------------------
Resultado_Ensaio.Amos_Dh_Amostra = (
SELECT MIN(Reen2.Amos_Dh_Amostra)
FROM Resultado_Ensaio Reen2
WHERE Resultado_Ensaio.Amos_Cd_Loc_Amostg = Reen2.Amos_Cd_Loc_Amostg
AND Resultado_Ensaio.Amos_Cd_Tipo_Local = Reen2.Amos_Cd_Tipo_Local
AND Reen2.Amos_Dh_Amostra >= TO_TIMESTAMP('1999-11-01 07:00', 'YYYY-MM-DD HH24:MI:SS')
)
)
AND Resultado_Ensaio.Amos_Cd_Loc_Amostg like '314TQ5901%'
ORDER BY Resultado_Ensaio.Amos_Dh_Amostra, Resultado_Ensaio.Amos_Cd_Loc_Amostg, Caract_Produto.Capr_Nm_Completo
问题是:
每次引用变量 :posicao 时,我的请求都需要具有相同数量的变量
让 $dbInput := posicao1, posicao2
即使 posicao1 和 posicao2 得到相同的值。
Oracle Service Bus 在调用 DbAdapters
时是这样工作的
我在 SQL{ "U" = UPPER(:codigo) } 的这一部分遇到错误。当我删除变量并将 :codigo 硬编码为 u 或 U 时,它工作正常。我收到的错误是缺少输入或输出参数。我在 Oracle 12c 服务总线上收到此错误
完整 SQL:
SELECT Resultado_Ensaio.Amos_Cd_Tipo_Local, Resultado_Ensaio.Amos_Cd_Loc_Amostg, Resultado_Ensaio.Prod_Cd_Id, Resultado_Ensaio.Amos_Dh_Amostra,
Resultado_Ensaio.Reen_Md_Res_Num, Componente_Gas_Nat.Cpgn_Nm_Abreviado,
Caract_Produto.Capr_Nm_Completo,
Unidade_Medida_Emq.Unme_Sg_Notacao, Metodo_Ensaio.Prme_Cd_Id, Metodo_Ensaio.Meen_Cd_Id,
Resultado_Ensaio.Reen_Cd_Res_Alfa_E, Resultado_Ensaio.Tiam_Cd_Id, Caract_Produto.Capr_Cd_Comp_Carac,
Caract_Produto.Capr_Cd_Id
, Ce.AMOS_NR_CERT_QUAL, Ce.AMOS_DT_CERT_QUAL
FROM Caract_Produto
INNER JOIN Resultado_Ensaio ON (Caract_Produto.Capr_Cd_Id = Resultado_Ensaio.Capr_Cd_Id
AND Caract_Produto.Capr_Cd_Comp_Carac = Resultado_Ensaio.Capr_Cd_Comp_Carac
AND Caract_Produto.Grcp_Cd_Id = Resultado_Ensaio.Grcp_Cd_Id)
INNER JOIN Metodo_Ensaio ON (Metodo_Ensaio.Meen_Cd_Id = Resultado_Ensaio.Meen_Cd_Id
AND Metodo_Ensaio.Prme_Cd_Id = Resultado_Ensaio.Prme_Cd_Id)
INNER JOIN Unidade_Medida_Emq Unidade_Medida_Emq ON (Unidade_Medida_Emq.Gume_Cd_Id = Resultado_Ensaio.Gume_Cd_Id
AND Unidade_Medida_Emq.Unme_Cd_Id = Resultado_Ensaio.Unme_Cd_Id)
LEFT JOIN Caract_Produto_Componente ON (Caract_Produto_Componente.Grcp_Cd_Id = Resultado_Ensaio.Grcp_Cd_Id
AND Caract_Produto_Componente.Capr_Cd_Id = Resultado_Ensaio.Capr_Cd_Id
AND Caract_Produto_Componente.Capr_Cd_Comp_Carac = Resultado_Ensaio.Capr_Cd_Comp_Carac)
LEFT JOIN Componente_Gas_Nat ON (Caract_Produto_Componente.Cpgn_Cd_Id = Componente_Gas_Nat.Cpgn_Cd_Id)
LEFT JOIN Certificado_Ensaio Ce ON (Resultado_Ensaio.Amos_Cd_Loc_Amostg = Ce.Amos_Cd_Loc_Amostg
AND Resultado_Ensaio.Amos_Cd_Tipo_Local = Ce.Amos_Cd_Tipo_Local
AND Resultado_Ensaio.Amos_Dh_Amostra = Ce.Amos_Dh_Amostra
AND Resultado_Ensaio.Tiam_Cd_Id = Ce.Tiam_Cd_Id
AND Resultado_Ensaio.Prod_Cd_Id = Ce.Prod_Cd_Id
AND Resultado_Ensaio.Prco_Cd_Comp_Prod = Ce.Prco_Cd_Comp_Prod
AND Resultado_Ensaio.Orga_Cd_Cbi_Exec = Ce.Orga_Cd_Cbi_Exec)
WHERE
Resultado_Ensaio.Amos_Cd_Tipo_Local = (:tipo)
--------------AND ('U' = UPPER(:posicao) AND-------------------------------
Resultado_Ensaio.Amos_Dh_Amostra = (
SELECT MAX(Reen2.Amos_Dh_Amostra)
FROM Resultado_Ensaio Reen2
WHERE Resultado_Ensaio.Amos_Cd_Loc_Amostg = Reen2.Amos_Cd_Loc_Amostg
AND Resultado_Ensaio.Amos_Cd_Tipo_Local = Reen2.Amos_Cd_Tipo_Local
AND Reen2.Amos_Dh_Amostra <= TO_TIMESTAMP('1999-11-01 07:00', 'YYYY-MM-DD HH24:MI:SS')
)
OR
------------------'P' = UPPER(:posicao) AND--------------------------------
Resultado_Ensaio.Amos_Dh_Amostra = (
SELECT MIN(Reen2.Amos_Dh_Amostra)
FROM Resultado_Ensaio Reen2
WHERE Resultado_Ensaio.Amos_Cd_Loc_Amostg = Reen2.Amos_Cd_Loc_Amostg
AND Resultado_Ensaio.Amos_Cd_Tipo_Local = Reen2.Amos_Cd_Tipo_Local
AND Reen2.Amos_Dh_Amostra >= TO_TIMESTAMP('1999-11-01 07:00', 'YYYY-MM-DD HH24:MI:SS')
)
)
AND Resultado_Ensaio.Amos_Cd_Loc_Amostg like '314TQ5901%'
ORDER BY Resultado_Ensaio.Amos_Dh_Amostra, Resultado_Ensaio.Amos_Cd_Loc_Amostg, Caract_Produto.Capr_Nm_Completo
问题是:
每次引用变量 :posicao 时,我的请求都需要具有相同数量的变量
让 $dbInput := posicao1, posicao2
即使 posicao1 和 posicao2 得到相同的值。
Oracle Service Bus 在调用 DbAdapters