CREATE or REPLACE PACKAGE "MY_PACKAGE" IS
TYPE COLUMN_TYPE IS RECORD
(
COLUMN_NAME VARCHAR(4000),
DATA_TYPE VARCHAR(4000),
NULLABLE VARCHAR(100)
);
TYPE COLUMN_TBL_TYPE IS TABLE OF COLUMN_TYPE INDEX BY VARCHAR(240);
PROCEDURE get_tab_columns(p_table_name IN VARCHAR2,
x_columns OUT NOCOPY COLUMN_TBL_TYPE,
x_return_status OUT VARCHAR2,
x_return_message OUT VARCHAR2,
p_exclude_lobs IN VARCHAR2 );
end "MY_PACKAGE";
CREATE or REPLACE PACKAGE BODY "MY_PACKAGE" IS
PROCEDURE get_tab_columns(p_table_name IN VARCHAR2,
x_columns OUT NOCOPY COLUMN_TBL_TYPE,
x_return_status OUT VARCHAR2,
x_return_message OUT VARCHAR2,
p_exclude_lobs IN VARCHAR2 )
IS
CURSOR c_non_lob_cols IS
SELECT column_name,
decode(data_type, 'VARCHAR2', data_type || '(' || data_length || ')',
data_type) data_type,
nullable
FROM all_tab_columns
WHERE data_type NOT IN ('CLOB', 'BLOB', 'NCLOB', 'BFILE', 'SDO_GEOMETRY')
-- updated by eric.liu@hand at version V20150602.1
-- Exclude more INTERNAL* columns.
AND column_name NOT IN ('INTERNAL_UPSERT_FLAG', 'INTERNAL_UPDATE_DATE')
ORDER BY COLUMN_ID;
BEGIN
FOR r IN c_non_lob_cols
LOOP
x_columns(r.column_name) := r; --类型不匹配
END LOOP;
END;
end "MY_PACKAGE";
DROP PACKAGE MY_PACKAGE;
x_columns(r.column_name) := r; 上面这句话报类型不匹配,要怎么弄啊?
如报错所说,猜测你这里应该是要想写成以下:
x_columns(r.column_name).DATA_TYPE := r.data_type;
x_columns(r.column_name).NULLABLE := r.NULLABLE;