基本となるステートメントの結果を取得しようとしています。 SQL文は問題なく動作します。しかし、結果を印刷するためにrefcursorを使いたいと思います。refcursorで無効なSQL文エラー
ORA-00900:無効なSQL文 ORA-01008:いないすべての変数束縛 ORA-00900:無効なSQL文の
VARIABLE reader refcursor;
DECLARE
line varchar2(32767);
BEGIN
line := 'SELECT role_id,';
FOR n IN (SELECT name
FROM (SELECT competence.skill_role.role_id,
competence.skill_label.name,
competence.skill_role.target_value
FROM competence.skill_role,
competence.skill_label
WHERE competence.skill_label.skill_id =
competence.skill_role.skill_id
AND competence.skill_label.language_id = 1)
matrix_result) LOOP
line := line || '(decode(name,''' || n.name ||
''',target_value)) "' || n.name || '",';
END LOOP;
line := RTRIM(line, ',') ||
' FROM (SELECT competence.skill_role.role_id,
competence.skill_label.name,
competence.skill_role.target_value
FROM competence.skill_role, competence.skill_label
WHERE competence.skill_label.skill_id =
competence.skill_role.skill_id
AND competence.skill_label.language_id = 1) matrix_result';
--dbms_output.put_line(line);
--execute immediate line;
OPEN :reader FOR line;
END;
/
PRINT :reader;
表データ
CREATE TABLE competence.skill_role
(skill_id NUMBER,
role_id NUMBER,
target_value NUMBER)
/
INSERT ALL
INTO competence.skill_role VALUES (3432030, 1421866, 2)
INTO competence.skill_role VALUES (3434962, 1421866, 2)
INTO competence.skill_role VALUES (3488025, 3488804, 4)
SELECT * FROM competence.skill_role
SKILL_ID ROLE_ID target_value
---------- ------- -----------
3432030 1421866 2
3434962 1421866 2
3488025 3488804 4
CREATE TABLE competence.skill_label
(skill_id NUMBER,
name vchar2 (30))
/
INSERT ALL
INTO competence.skill_label VALUES (3432030, 'Alueen projektipätevyys')
INTO competence.skill_label VALUES (3434962, 'Moottorin koekäyttö')
INTO competence.skill_label VALUES (3488025, 'Etähallintajärjestelmät')
SELECT * FROM arc_competence.skill_label
SKILL_ID NAME
---------- -------
3432030, Alueen projektipätevyys
3434962, Moottorin koekäyttö
3488025, Etähallintajärjestelmät
私は、次のエラーを取得します私は最初のクエリから次の結果を得たいと思います。あなたの答え(私が正しく理解している)から、答えを得るために結果のクエリを手動で実行する必要があるようです。結果のクエリを実行せずに結果を得たいと思っています:-)私は現時点ではクライアントマシンへのアクセス権を持っていませんが、私は今そこに行きます。
ROLE_ID Alueen projektipätevyys Moottorin koekäyttö Etähallintajärjestelmät
1421866 2 2
3488804 4
あなたの 'OPEN'の前に' dbms_output.put_line'コールのコメントを外した場合、それが示すSQL文は何ですか? –
私はSQLクエリの結果を取得します(動的ピボッティングのための有効なSQLクエリ自体です) – Jaanna
それから私は混乱します。 'line'が有効なSQLクエリであれば、あなたのコードは正常に実行されます(以下で説明します)。エラーが発生した場合は、生成しているSQL文が有効でないか、言及していない問題が多いことを意味します。 –