1

나는 다음과 같은 스키마와 테이블 학생이 있습니다PL/SQL 프로 시저 - 입력과 같은 기록의 목록

CREATE TABLE STUDENTS 
(
    SID VARCHAR2(10 BYTE) NOT NULL, 
    SNAME VARCHAR2(50 BYTE) NOT NULL, . . . 
) 

내가 입력 인수 각 항목에서와 같이 학생들의 목록을 취할 것입니다 저장 프로 시저를 만들려면을 목록에는 sid와 sname이 있습니다.

입력 매개 변수의 유형 및 정의 방법은 무엇입니까?

답변

2

오라클 콜렉션 유형을 매개 변수로 전달할 수 있습니다.

컬렉션은 varchar로 인덱싱 된 연관 배열과 같은 키 값 쌍일 수 있습니다. 이 예에서 인덱스는 SID 일 수 있으며 값은 SNAME 일 수 있습니다.

컬렉션에 대해 알아 보려면 여기를 읽어

: 특히 연관 배열 여기 http://docs.oracle.com/cd/B10501_01/appdev.920/a96624/05_colls.htm

그리고 : 또는 당신이 두 개의 매개 변수를 전달할 수 http://www.oracle-base.com/articles/9i/AssociativeArrays9i.php

를 (예 : DBMS_SQL.VARCHAR2_TABLE 유형 등) VARCHAR 값을 잡고 두 컬렉션 먼저 SID를 잡고 두 번째는 해당 SNAME 값을 보유하고 인덱스 번호로 효과적으로 연결됩니다. DBMS_SQL 정의 유형 여기를 참조하십시오 : http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_sql.htm

는 희망이 도움이 ...

편집 :

모든 유형을 선언 한 다음 패키지 내에 모든 작업을 수행하는 경우 :

-- Declare type 
TYPE student_coltype IS TABLE OF student%ROWTYPE 
    INDEX BY BINARY_INTEGER; 
-- Declare variable of type 
student_col student_coltype; 

전역 유형을 원할 경우 명시 적으로 열을 선언해야합니다.

CREATE TYPE student_rec 
AS OBJECT 
(SID VARCHAR2(10), 
SNAME VARCHAR2(50)); 

CREATE TYPE student_collection 
AS TABLE OF student_rec; 

그런 다음 DB와 함께 학생 수첩 유형을 사용하여 학생 데이터 컬렉션을 프로 시저 및 함수 안팎으로 전달할 수 있습니다. 오라클의 객체를 사용하는

워드 프로세서 현재 위치 : http://docs.oracle.com/cd/B19306_01/appdev.102/b14260/adobjint.htm

+0

그러나 앞으로 테이블이 수평 적으로 확장 될 수 있으므로 Java에서 List 과 논리적으로 동일한 항목이 필요합니다. – TheLameProgrammer

+1

테이블에 더 많은 열이있을 수 있다면 여전히 Oracle 컬렉션을 사용할 수 있습니다. 컬렉션은 레코드 모음입니다. STUDENTS 테이블 % ROWTYPE을 기반으로 레코드를 정의하면 테이블이 동적으로 변경됩니다. – Ollie

+0

참조 : http://docstore.mik.ua/orelly/oracle/prog2/ch09_02.htm – Ollie

0
create or replace procedure show_students is 
    begin 
     dbms_output.put_line('------------------------');  
     dbms_output.put_line('Student ID| Student Name|'); 
     dbms_output.put_line('------------------------'); 
     for i in(select * from students) 
     loop 
     dbms_output.put(i.sid||' |'); 
     dbms_output.put(i.sname||'  |'); 
     end loop; 
     dbms_output.put_line('------------------------------'); 
    end; 
    /
    show errors; 
    set serveroutput on; 
    execute show_students; 
1

당신은 당신의 몇 SID에 대한 유형을 만들 수 있습니다, SNAME :

CREATE OR REPLACE 
TYPE T_STUDENT AS TABLE OF O_STUDENT; 
:

CREATE OR REPLACE 
TYPE O_STUDENT AS OBJECT (
    SID       VARCHAR2(20) 
, SNAME       VARCHAR2(20) 
); 

그런 다음 컬렉션 형식을 만들

그런 다음 프로 시저의 매개 변수 유형으로 T_STUDENT를 사용하십시오. SQL INSERT 문을 사용하여 T_STUDENT 유형의 변수에 값을 삽입 할 수 있습니다.