Plsql PL SQL插入列表

Plsql PL SQL插入列表,plsql,plsqldeveloper,Plsql,Plsqldeveloper,我正试图在使用pl/sql的过程中插入一个整数列表,但不幸的是,我找不到一种方法,有人能告诉我如何在pl/sql中将整数列表传递到过程中。此代码使用C#和MS-sql SERVER 创建用户定义的表类型: //存储过程 C#代码 使用(var con=new SqlConnection(contr)) { con.Open(); 使用(SqlCommand cmd=newsqlcommand(“exec sp_UserIntegersList@IntList”,con)) { var table

我正试图在使用pl/sql的过程中插入一个整数列表,但不幸的是,我找不到一种方法,有人能告诉我如何在pl/sql中将整数列表传递到过程中。

此代码使用C#和MS-sql SERVER

创建用户定义的表类型:

//存储过程

C#代码

使用(var con=new SqlConnection(contr))
{
con.Open();
使用(SqlCommand cmd=newsqlcommand(“exec sp_UserIntegersList@IntList”,con))
{
var table=新数据表();
表.列.添加(“项目”,类型(int));
对于(int i=0;i<10;i++)
表.行.添加(“项目”+i);
var pList=新的SqlParameter(“@IntList”,SqlDbType.Structured);
pList.TypeName=“dbo.StringList”;
pList.Value=表格;
cmd.Parameters.Add(pList);
使用(var dr=cmd.ExecuteReader())
{
while(dr.Read())
Console.WriteLine(dr[“Item”].ToString());
}
}
使用架构范围的类型

CREATE TYPE TY_INT_ARRAY IS TABLE OF INTEGER;
或包类型

CREATE OR REPLACE PACKAGE PKG_INT_TEST AS

  TYPE TY_INT_ARRAY IS TABLE OF INTEGER;

  /*
    ... more stuff
  */

END PKG_INT_TEST;
/
注意:您不能在SQL中使用包类型!只能在PLSQL中使用

请尝试以下示例:

SET SERVEROUTPUT ON;
SET FEEDBACK OFF;
CLEAR;

-- create a schema type of table of integers
CREATE TYPE TY_INT_ARRAY IS TABLE OF INTEGER;
/

-- Create a dumping procedure with array "list" parameter
CREATE OR REPLACE PROCEDURE DUMP_INT_ARRAY(P_ARRAY IN TY_INT_ARRAY) IS
BEGIN
  FOR L_I IN P_ARRAY.FIRST .. P_ARRAY.LAST LOOP
    DBMS_OUTPUT.PUT_LINE(TO_CHAR(P_ARRAY(L_I)));
  END LOOP;
END;
/

-- Test the procedure:
DECLARE
  -- Declare an int array variable
  V_MY_ARRAY TY_INT_ARRAY;

BEGIN
  -- Assign values
  V_MY_ARRAY := TY_INT_ARRAY(1, 2, 3, 4, 5, 6, 7, 8, 9);

  DUMP_INT_ARRAY(V_MY_ARRAY);
END;
/

DROP PROCEDURE DUMP_INT_ARRAY;
DROP TYPE TY_INT_ARRAY;

您可以使用BULK COLLET INTO语句或“Object”函数访问器(如
.EXTEND
V_MY_数组(V_MY_数组.LAST))填充值:=10;

您可以使用pl\sql集合。或者更麻烦的方法是在一个字符串中使用逗号分隔的整数。是的,您可以使用用户定义的表类型w8来完成。我将与您共享我的代码。谢谢vikas,请共享您的代码,这将帮助我进行指导。请检查下面的代码,了解您需要什么?作者明确说明了plsql(oracle)而不是sql server。
CREATE TYPE TY_INT_ARRAY IS TABLE OF INTEGER;
CREATE OR REPLACE PACKAGE PKG_INT_TEST AS

  TYPE TY_INT_ARRAY IS TABLE OF INTEGER;

  /*
    ... more stuff
  */

END PKG_INT_TEST;
/
SET SERVEROUTPUT ON;
SET FEEDBACK OFF;
CLEAR;

-- create a schema type of table of integers
CREATE TYPE TY_INT_ARRAY IS TABLE OF INTEGER;
/

-- Create a dumping procedure with array "list" parameter
CREATE OR REPLACE PROCEDURE DUMP_INT_ARRAY(P_ARRAY IN TY_INT_ARRAY) IS
BEGIN
  FOR L_I IN P_ARRAY.FIRST .. P_ARRAY.LAST LOOP
    DBMS_OUTPUT.PUT_LINE(TO_CHAR(P_ARRAY(L_I)));
  END LOOP;
END;
/

-- Test the procedure:
DECLARE
  -- Declare an int array variable
  V_MY_ARRAY TY_INT_ARRAY;

BEGIN
  -- Assign values
  V_MY_ARRAY := TY_INT_ARRAY(1, 2, 3, 4, 5, 6, 7, 8, 9);

  DUMP_INT_ARRAY(V_MY_ARRAY);
END;
/

DROP PROCEDURE DUMP_INT_ARRAY;
DROP TYPE TY_INT_ARRAY;