2016-02-01 4 views
-1

Я пытаюсь вставить список целых чисел в процедуру с использованием pl/sql, но, к сожалению, не могу найти способ, может ли кто-нибудь объяснить мне, как передать список целых чисел в процедуру в PL/SQL ,PL SQL Insert List

+0

Вы можете использовать PL \ SQL коллекции для этого. Или более грязным способом является использование целых чисел, разделенных запятыми, в одной строке. –

+0

Да, вы можете использовать пользовательский тип таблицы w8, я поделюсь с вами моим кодом –

+0

спасибо vikas, пожалуйста, поделитесь своим кодом, это поможет мне вести. –

ответ

-1

Этот код использует C# и MS-SQL SERVER

Создать свой User Defined Type Table:

CREATE TYPE [dbo].[IntegersList] AS TABLE(
    [Item] INT NULL 
); 

// Процедура Магазин

CREATE PROCEDURE [dbo].[sp_UserIntegersList] 
    @IntList IntegersList READONLY 
AS 
BEGIN 
    -- Just return the items we passed in 
    SELECT l.Item FROM @IntList l; 
END 

C# код

using (var con = new SqlConnection(constr)) 
{ 
    con.Open(); 
    using (SqlCommand cmd = new SqlCommand("exec sp_UserIntegersList @IntList", con)) 
    { 
     var table = new DataTable(); 
     table.Columns.Add("Item", typeof(int)); 

     for (int i = 0; i < 10; i++) 
      table.Rows.Add("Item " + i); 

     var pList = new SqlParameter("@IntList", SqlDbType.Structured); 
     pList.TypeName = "dbo.StringList"; 
     pList.Value = table; 

     cmd.Parameters.Add(pList); 

     using (var dr = cmd.ExecuteReader()) 
     { 
      while (dr.Read()) 
       Console.WriteLine(dr["Item"].ToString()); 
     } 
    } 
+0

Автор четко заявил plsql (oracle), а не сервер sql. – AshesToAshes

0

Используйте схему-широкий тип

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 COLLECT INTO Заявление или «объект» -функции аксессорах как .EXTEND и V_MY_ARRAY(V_MY_ARRAY.LAST) := 10;

Смежные вопросы