이 유형은 다음과 같이 생성했습니다. PROD_OBJ 유형으로 PRODTABLE을 만들거나 바꾸십시오.중첩 테이블의 요소 속성 업데이트
나는 추적의 PLSQL 코드에서 PRODTABLE 것을 사용
FUNCTION INSERT_PRODUCTS (
a_supplier_id IN FORNECEDOR.ID_FORNECEDOR%TYPE,
a_prodArray IN PRODTABLE
)
RETURN NUMBER IS
v_error_code NUMBER;
v_error_message VARCHAR2(255);
v_result NUMBER:= 0;
v_prod_id PRODUTO.ID_PROD%TYPE;
v_supplier FORNECEDOR%ROWTYPE;
v_prodInserted PROD_OBJ;
type nestedTable is table of PROD_OBJ;
newList nestedTable := nestedTable();
BEGIN
SELECT FORNEC_OBJ(ID_FORNECEDOR,NOME_FORNECEDOR,MORADA,ARMAZEM,EMAIL,TLF,TLM,FAX) into v_supplier from fornecedor where id_fornecedor = a_supplier_id;
FOR i IN a_prodArray.FIRST .. a_prodArray.LAST LOOP
INSERT INTO PRODUTO (PRODUTO.ID_PROD,PRODUTO.NOME_PROD,PRODUTO.PREC_COMPRA_PROD,PRODUTO.IVA_PROD,PRODUTO.PREC_VENDA_PROD,PRODUTO.QTD_STOCK_PROD,PRODUTO.QTD_STOCK_MIN_PROD)
VALUES (S_PRODUTO.nextval,a_prodArray(i).NOME_PROD,a_prodArray(i).PREC_COMPRA_PROD,a_prodArray(i).IVA_PROD,NULL,NULL,NULL);
SELECT ID_PROD into v_prod_id from PRODUTO where NOME_PROD = a_prodArray(i).NOME_PROD;
INSERT INTO PROD_FORNECIDO VALUES (a_supplier_id, v_prod_id,a_prodArray(i).PREC_COMPRA_PROD);
SELECT PROD_OBJ(ID_PROD,NOME_PROD,PREC_COMPRA_PROD,PREC_VENDA_PROD,QTD_STOCK_PROD,QTD_STOCK_MIN_PROD,IVA_PROD) into v_prodInserted from PRODUTO where ID_PROD= v_prod_id;
newList.extend;
newList(newList.last):= v_prodinserted;
END LOOP;
/*the next line generates Error(43,63): PLS-00642: local collection types not allowed in SQL statements,
Error(43,63): PL/SQL: ORA-00932: inconsistent datatypes: expected UDT got CHAR */
INSERT INTO FORNECPRODS2 VALUES (a_supplier_id,v_supplier,newList);
v_result:= 1;
RETURN v_result;
COMMIT;
(...)
END;
내가 a_prodArray(i):= v_prodInserted
같은 것을하고 싶어하지만 중첩 테이블이기 때문에 내가 할 수없는, 그래서 내가 사용하는 또 다른 하나를 검색해야 그 삽입 또는 중첩 된 테이블의 각 요소를 새로운 삽입 된 제품으로 업데이트하십시오. PRODTABLE의 각 prod_obj에는 JAVA의 id = 0이 있기 때문에이 작업을 수행해야합니다. 어쩌면 다른 방법이 있습니다. 기본 키의 기본값을 SEQUENCE.nextval과 같게 만드는 것 같습니다. 잘 모르겠습니다. 누군가 날 기쁘게 할 수 있니?
감사합니다.