У меня есть код, который отправляет данные в виде списка строк из текстового поля в oracle процедуру.
Я получаю значения в текстовом поле ниже.
public List<string> TxtPieceList()
{
List<string> pieces = new List<string>();
for (int i = 0; i < txtListe.Lines.Count(); i++)
{
pieces.Add(txtListe.Lines[i]);
}
return pieces;
}
Есть два переменные, которые я отправил.
p_piece_id получает значение из текстового поля.
p_mother_check получает значение из флажка.
Затем я передаю эти данные в процедуру:
public void gridDoldur()
{
var annesecilimi = cbMother.Checked;
List<string> gridList = TxtPieceList();
using (OracleConnection con = new OracleConnection(connectionString))
{
OracleCommand cmd = new OracleCommand("Z_LABEL_PRINTER_GR.LabelPieceList", con);
con.Open();
cmd.CommandType = CommandType.StoredProcedure;
try
{
OracleParameter p_piece_id = new OracleParameter();
OracleParameter p_mother_check = new OracleParameter();
p_piece_id.OracleDbType = OracleDbType.Varchar2;
p_mother_check.OracleDbType = OracleDbType.Varchar2;
p_piece_id.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
p_mother_check.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
p_piece_id.Value = from emp in gridList select emp;
p_mother_check.Value = annesecilimi;
cmd.Parameters.Add(p_piece_id);
cmd.Parameters.Add(p_mother_check);
cmd.Parameters.Add("p_rc", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
OracleDataAdapter da = new OracleDataAdapter(cmd);
OracleCommandBuilder commandBuilder = new OracleCommandBuilder(da);
DataTable dt = new DataTable();
da.Fill(dt);
this.gridPieceList.Visible = true;
gridPieceList.DataSource = dt;
}
Но я получаю ошибку в процедуре, которая возвращает значение oracle.
Значение OracleParameter недопустимо.
CREATE OR REPLACE PACKAGE BODY Z_LABEL_PRINTER_GR
AS
T_STRING_LIST DEFINAION : TYPE "T_STRING_LIST" AS TABLE OF VARCHAR2(2000)
PROCEDURE LabelPieceList(p_piece_id IN T_STRING_LIST,
p_mother_check IN varchar2,
p_rc OUT sys_refcursor)
IS
BEGIN
IF p_mother_check='False' THEN
OPEN p_rc FOR
SELECT PIECE_NUM_ID,PIECE_ID,ACTUAL_WEIGHT,ACTUAL_THICK,ACTUAL_WIDTH
FROM piece WHERE PIECE_ID IN (SELECT COLUMN_VALUE FROM TABLE(p_piece_id))
ELSE
OPEN p_rc FOR
SELECT PIECE_NUM_ID,PIECE_ID,ACTUAL_WEIGHT,ACTUAL_THICK,ACTUAL_WIDTH FROM piece WHERE PIECE_ID IN(
(SELECT COLUMN_VALUE FROM TABLE(p_piece_id)) AND PH.STATUS=2);
END IF ;
END LabelPieceList;
-- Package body
END Z_LABEL_PRINTER_GR;