2017-05-22 12 views
1

Application Express를 사용하여 Oracle 12c에서 프로그래밍 방식으로 PL/SQL 트리거에서 JSON 배열의 길이를 찾으려고합니다. 이렇게하면 각 요소를 반복하고 다른 테이블에 데이터를 삽입 할 수 있습니다. 현재 JSON은 CLOB로 열에 저장되어 있으며 VarCHAR2로 변환 중입니다.PL/SQL 트리거에서 JSON 배열 길이 찾기

SQL 오류 메시지 : ORA-06502 : PL/SQL : 숫자 또는 값 오류
ORA-06512 : 코드 아래 :이 트리거를 실행할 때

declare 
    json CLOB; 
    json_varchar VARCHAR2(32767); 
    json_member WWV_FLOW_T_VARCHAR2; 
begin 
    json := :new.ORDER_SKU; 
    json_varchar := CAST(json AS VARCHAR2); 
    apex_json.parse (json); 
    json_member := APEX_JSON.get_members(p_path=>'order_sku'); 
    FOR i IN 1..json_member.count 
    LOOP 
    ... 
    END LOOP; 
end; 

나는 다음과 같은 오류가 점점 오전에 "APEX_050100.WWV_FLOW_JSON", 라인 1,597
ORA-06512 "TriggerName"라인에서 9
ORA-04088 'TriggerName'
ORA-06512 트리거의 실행 중에 에러 : 라인에서 6`

,

JSON 배열의 길이를 찾기 위해 다른 방법을 사용해야한다고 생각하지만 문서 또는 스택 오버플로를 통해 찾을 수 없었습니다. 당신이 12C 버전이기 때문에 당신이 정말로 원하는 경우 json_table 살펴 보셔야로

{ 
"order_sku":[{"sku1":"details"},{"sku2":"details"}] 
} 
+1

Thanks N Cheadle. 당신이 12c에있는 것 같습니다. 12cR1에서 가져온 json 지원을 살펴 보았는지 궁금하네요? 'json_table'과 같은 함수가 있습니다. https://docs.oracle.com/database/121/ADXDB/json.htm#ADXDB6246 – alexgibbs

+0

JSON_Table은 주석을 작성해 주셔서 감사드립니다. –

답변

1

내가 @alexgibbs에 동의 : 그것은 도움 json으로는 다음과 같은 형태로 저장되어있는 인 경우도

apex_json을 사용하면 clob을 varchar로 변환 할 필요가 없습니다.

DECLARE 
l_json CLOB := '{"order_sku":[{"sku1":"details"},{"sku2":"details"}] }'; 
j apex_json.t_values; 
l_path VARCHAR2(100); 

BEGIN 
apex_json.parse(j, l_json); 

FOR i IN 1..apex_json.get_count(p_values => j, p_path => 'order_sku') 
LOOP 
    -- if your sku tag could be always the same "sku" you would not need the following line 
    l_path := 'order_sku[%d].' || apex_json.get_members(p_values => j, p_path => 'order_sku[%d]', p0 => i)(1); 

    -- replace with the insert you want to do 
    dbms_output.put_line(apex_json.get_varchar2(p_values => j, p_path => l_path, p0 => i)); 

END LOOP; 

END; 
+0

당신이 옳다고 생각합니다. JSON 테이블을 좀 더 자세하게보고 있습니다. 수동으로 데이터를 직접 삽입하는 것보다 훨씬 깔끔할 것이라고 생각합니다. json_table을 사용하여 뷰를 생성하는 방법에 대해 더 자세히 살펴보고, 문제가 해결되면 솔루션으로 플래그를 지정합니다. –

+0

JSON 테이블은 해당 함수를 사용하여 뷰를 작성해야 정확히 무엇을 찾고 있었습니까? –