0

私は Oracle の初心者であり、これが Oracle クエリに関する初めての投稿です。

以下は、SP 呼び出しごとに 1 行を挿入する既存のクエリです。

SAP システムが配列をストアド プロシージャに送信する配列として入力を受け入れる SP を変更したいと考えています。

SP で観察したように、ID の値は更新ごとに増分されます。SP は、この電話番号とテキストの入力を受け取り、ID の値を順番に挿入します。ID は入力に渡されません。

CREATE OR REPLACE PROCEDURE DetailsTable
(
    Phoneno IN NUMBER,
    Text IN VARCHAR2
    )
aS
BEGIN
   INSERT INTO PERSON.DETAILS(
                           ID,
                           PHONENO,
                           TEXT,
                           COUNTRY,
                           LANG,

                           --PRIORITY,
                           SENDER)
   VALUES (
           DETAILS_seq.nextval ,
           p_phoneno,
           p_text ,
           'RSA',
           'EN',
           'Nest-Payroll');
commit;
END DetailsTable;

ガイドしてください。

4

2 に答える 2

1

SQL で Type を使用できますが、SQL Type として宣言する必要があります。

create or replace type person_t as object 
    (phoneno number
     , text varchar2(100)
     );
/
create or replace type person_nt as table of person_t
/

次のように使用します。

CREATE OR REPLACE PROCEDURE DetailsTable
(
    p_array in person_nt
    )
aS
BEGIN
   INSERT INTO PERSON.DETAILS(
                           ID,
                           PHONENO,
                           TEXT,
                           COUNTRY,
                           LANG,

                           --PRIORITY,
                           SENDER)
   select DETAILS_seq.nextval ,
           t.phoneno,
           t.text ,
           'RSA',
           'EN',
           'Nest-Payroll'
   from table (p_array)t;
   commit;
END DetailsTable;
/
于 2014-11-01T14:54:13.667 に答える
1
SQL> CREATE OR REPLACE TYPE arraytype AS VARRAY(1000) OF VARCHAR2(100);
  2  /

Type created

SQL> CREATE OR REPLACE PROCEDURE test_array (in_array arraytype) IS
  2  BEGIN
  3    FOR i IN 1..in_array.count LOOP
  4      DBMS_OUTPUT.PUT_LINE(in_array(i));
  5    END LOOP;
  6  END;
  7  /

Procedure created

SQL> DECLARE
  2    var_array arraytype;
  3  BEGIN
  4    var_array := arraytype();
  5    var_array.EXTEND(10);
  6    var_array(1) := '1st sentence in the array';
  7    var_array(2) := '2nd sentence in the array';
  8    test_array(var_array);
  9  END;
 10  /

1st sentence in the array
2nd sentence in the array
于 2014-11-01T10:28:56.460 に答える