우선 Oracle PLSQL에서 나는 녹슬었고 몇몇 사람들은 이것이 할 수 없다고 말했고 다른 사람들은 할 수 있다고 말했고, 나는 그렇게 할 수 없다고 보았습니다. 어떤 도움이라도 대단히 감사하겠습니다.PLSQL이 레코드의 값을 동적으로 가져 오는 중입니까?
동적으로 레코드 유형의 열 값을 읽으려고합니다.
토큰이있는 메시지가있어서 토큰을 레코드 집합의 값으로 대체해야합니다. 내가 토큰을 구문 분석하고 다른 곳이
[AGENT_NAME]에서 [상태] :
그래서 메시지가 같습니다. 나는이가 함께 수행 할 수 있습니다 알고 자바 스크립트에서:
: (콘솔에서 실행됩니다)var record = {
status : "Open",
agent_name : "John"
};
var record2 = {
status : "Close",
agent_name : "Joe"
};
var records = [record, record2];
var token1 = "status";
var token2 = "agent_name";
for(var i=0; i<records.length; i++){
console.log(records[i][token1] + " by " + records[i][token2]);
}
Results : Open by John
Close by Joe
내가 여기
PLSQL
에서 같은 일을하고 싶지는 내 테스트 PLSQL입니다SET SERVEROUTPUT ON;
declare
TYPE my_record is RECORD
(
status VARCHAR2(30),
agent_name varchar2(30)
);
TYPE my_record_array IS VARRAY(6) OF my_record;
v_records my_record_array := my_record_array();
v_current_rec my_record;
v_current_rec2 my_record;
v_token varchar2(50):= 'agent_name';
v_token2 varchar2(50):= 'status';
begin
v_current_rec.status := 'Open';
v_current_rec.agent_name := 'John';
v_records.extend;
v_records(1) := v_current_rec;
v_current_rec2.status := 'Close';
v_current_rec2.agent_name := 'Ron';
v_records.extend;
v_records(2) := v_current_rec2;
FOR i IN 1..v_records.COUNT LOOP
--Hard coded
DBMS_OUTPUT.PUT_LINE(v_records(i).status || ' by ' || v_records(i).agent_name);
--Substitution vars entering v_records(i).status and v_records(i).agent_name for the prompts.
--How to do this without user interaction.
DBMS_OUTPUT.PUT_LINE(&status || ' by ' || &agent_name);
--Dynamically that doesn't work. How would this be accomplished
DBMS_OUTPUT.PUT_LINE(v_records(i).v_token || ' by ' || v_records(i).v_token2);
END LOOP;
END;
대체 변수를 사용하여 시도해 보았습니다. 사용하는 경우 작동합니다.
DBMS_ 프롬프트가 표시되면 OUTPUT.PUT_LINE (& agent_name)을 입력하고 v_records (i) .agent_name을 입력하십시오. 어떻게해야합니까?
답변 :
set serveroutput on;
DECLARE
type sr_record_map
IS
TABLE OF VARCHAR2(30) INDEX BY VARCHAR2(30);
type record_set
is
TABLE of sr_record_map index by BINARY_INTEGER;
v_current_rec sr_record_map;
v_record_set record_set;
v_token varchar2(30) := 'status';
v_token2 varchar2(30) := 'agent_name';
v_index number :=1;
begin
v_current_rec('status') := 'Open';
v_current_rec('agent_name') := 'John';
v_record_set(1) := v_current_rec;
v_current_rec('status') := 'Close';
v_current_rec('agent_name') := 'Joe';
v_record_set(2) := v_current_rec;
FOR i in 1..v_record_set.COUNT LOOP
v_current_rec := v_record_set(i);
DBMS_OUTPUT.PUT_LINE(v_current_rec(v_token) || ' by ' || v_current_rec(v_token2));
END LOOP;
end;
회원님의 기록에는 구성원 (열)이있을 수 있으며이를 선택하여 인쇄 할 수 있습니까? –
여러 개의 토큰이있을 수있는 메시지가 여러 개 있습니다. 나는 현장이 기록에 있다는 것을 알고 있습니다. 따라서 토큰 agent_name이 있으면 v_records (i) .agent_name 문자열을 평가하고 레코드에서 값을 가져 오려고합니다. 따라서 메시지의 토큰을 값으로 바꿀 수 있습니다. – John