私は1968年以降にすべての従業員を返すユーザ定義関数を作成することになっています。Oracle PL/SQLでネストした表を表示するにはどうすればよいですか?
まず、emp_dobsという名前の新しいオブジェクトを作成して従業員を保持します「FIRSTNAME、LASTNAME、および生年月日、元従業員表と同じデータ型を使用して:私が作成し、
CREATE OR REPLACE TYPE emp_dobs_nested AS TABLE OF emp_dobs;
/
最後に:
CREATE OR REPLACE TYPE emp_dobs AS OBJECT (
emp_fname VARCHAR2(20),
emp_lname VARCHAR2(20),
emp_dob DATE
);
/
は、その後、私はemp_dobsのテーブルとしてemp_dobs_nested作成関数th emp_dobs_nestedテーブルを返すことになっています:
CREATE OR REPLACE FUNCTION get_emp_dobs RETURN emp_dobs_nested
AS
dobs emp_dobs_nested;
BEGIN
SELECT emp_dobs(firstname, lastname, birthdate) BULK COLLECT INTO dobs
FROM employee
WHERE birthdate < TO_DATE('01-JAN-1968', 'DD-MON-YYYY');
RETURN dobs;
END;
/
emp_dob_nestedコンパイルとの奇妙な癖がありますが、しかし、どこのOracle SQL Developerは、「出力変数 - ログインし、」ラベルされた新しいタブが表示され、唯一EMP_FNAMEとemp_lnameのを示しています。それにもかかわらず、すべてがコンパイルされます。
今、私は機能をテストし、それが動作することを証明するためにその結果を表示したいが、私はこれをしようとすると:
DECLARE
dobs emp_dobs_nested;
BEGIN
dobs := get_emp_dobs;
DBMS_OUTPUT.PUT_LINE(dobs);
END;
/
私はこのエラーを取得する:
Error report -
ORA-06550: line 5, column 5:
PLS-00306: wrong number or types of arguments in call to 'PUT_LINE'
ORA-06550: line 5, column 5:
PL/SQL: Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
は、私が何をしないのですここに?ありがとう。
を試してみてください - クラスの割り当てを意味し、彼/彼女がPL/SQLクラスを取っていることを意味します。彼/彼女はPL/SQL技術を実践することになっています。 – mathguy
ああ、あなたも私の更新された答えを試すことができます、それは上記の受け入れられた答えに似るかもしれません – eifla001