Я пытаюсь вставить список целых чисел в процедуру с использованием pl/sql, но, к сожалению, не могу найти способ, может ли кто-нибудь объяснить мне, как передать список целых чисел в процедуру в PL/SQL ,PL SQL Insert List
-1
A
ответ
-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;
Смежные вопросы
- 1. PL/SQL INSERT Игнорируется заявление
- 2. Хранимая процедура INSERT (PL/SQL)
- 3. PL/SQL UPDATE/INSERT с переменной таблицы
- 4. INSERT ALL с условиями PL/SQL
- 5. PL/SQL insert на основе условий
- 6. Инструкция INSERT в PL/SQL FUNCTION
- 7. python list list insert newline
- 8. C++ List Insert Iterator
- 9. Получить возвращаемую строку INSERT в PL/pgSQL
- 10. таблица обновлений pl/sql
- 11. INSERT во временную таблицу GTT очень медленно от PL/SQL
- 12. PL/SQL - команда Insert не выполняется в блоке EXCEPTION
- 13. PL/SQL Validate/Insert/Update Status - retval vs. exception
- 14. PL SQL: отсутствует строка, вставленная в TRIGGER с ПОСЛЕ INSERT
- 15. Как я могу сделать этот INSERT в PL/SQL-процедуре?
- 16. PL/SQL ПЕРЕД ВСТАВКОЙ TRIGGER DOESNT STOP INSERT
- 17. Как использовать Select max и Insert вместе в pl sql
- 18. Oracle - PL/SQL - INSERT ALL с SELECT as VALUES
- 19. Запуск хранимой процедуры для запуска вместо INSERT (PL/SQL)
- 20. Переменная процедуры PL/SQL вместо имени столбца в заявлении insert
- 21. Как использовать INSERT INTO с этим блоком кода PL/SQL?
- 22. Как заменить truncate-insert с предложением merge в pl/sql
- 23. INSERT выбрать строки, используя pl/pgsql
- 24. python list insert поведение непонятно
- 25. MySQL insert with List Comprehensions
- 26. INSERT IGNORE vs IN list()
- 27. Python MySQL insert with list
- 28. sharepoint insert new item list
- 29. Обработка исключений PL SQL
- 30. PL/SQL: заявление SQL игнорируется?
Вы можете использовать PL \ SQL коллекции для этого. Или более грязным способом является использование целых чисел, разделенных запятыми, в одной строке. –
Да, вы можете использовать пользовательский тип таблицы w8, я поделюсь с вами моим кодом –
спасибо vikas, пожалуйста, поделитесь своим кодом, это поможет мне вести. –