我一直在研究如何在不使用'DESCRIBE table/view'的情況下描述TABLES和VIEWS。條款。我發現,它可以使用類似解決:如何在不使用DESCRIBE子句的情況下描述ORACLE包?
SELECT column_name, data_type, data_length, data_precision, data_scale, nullable
FROM all_tab_columns
WHERE table_name = 'TABLE'
這是一種計算機語言如PHP完全可編程的,但我沒有發現「描述PACKAGE_NAME」子句的解決方法。
我有以下想法(但在SQL * PLUS與閥芯):
DECLARE
x VARCHAR2(50);
CURSOR cursorPaquetes IS
SELECT DISTINCT OBJECT_NAME
FROM ALL_OBJECTS
WHERE OBJECT_TYPE = 'PACKAGE' AND OWNER = 'SATURN';
BEGIN
FOR item IN cursorPaquetes LOOP
x := 'DESCRIBE '||item.OBJECT_NAME||';';
EXECUTE IMMEDIATE x;
END LOOP;
END;
但它沒有工作:(拋出以下錯誤:
ORA-00900: sentencia SQL no válida ORA-06512: en línea 12
當修改這樣的變量 'x':
x := 'BEGIN DESCRIBE '||item.OBJECT_NAME||'; END;';
我得到以下錯誤:
ERROR en línea 1: ORA-06550: línea 1, columna 16: PLS-00103: Encountered the symbol "BVGKFDCS" when expecting one of the following: := . (@ % ; The symbol ":=" was substituted for "BVGKFDCS" to continue. ORA-06512: en línea 12
其中「BVGKFDCS」是我的模式的一個包的名稱。
在此先感謝。
P.D.我想類似的東西(而每個包裝):
DESCRIBE BVGKFDCS;
PROCEDURE P_GETPROFESSORS
Nombre de Argumento Tipo E/S ¿Por Defecto?
------------------------------ ----------------------- ------ --------
P_CAMP_IN VARCHAR2 IN
P_COLL_IN VARCHAR2 IN
P_DEPT_IN VARCHAR2 IN
P_TERM_IN VARCHAR2 IN
PROCEDURE P_GETTERMSBYPROF
Nombre de Argumento Tipo E/S ¿Por Defecto?
------------------------------ ----------------------- ------ --------
NAME_ARRAY TABLE OF VARCHAR2(32000) IN
VALUE_ARRAY TABLE OF VARCHAR2(32000) IN
PROCEDURE P_INIT
Nombre de Argumento Tipo E/S ¿Por Defecto?
------------------------------ ----------------------- ------ --------
PIDM VARCHAR2 IN
PROCEDURE P_OBTENER_VALOR
Nombre de Argumento Tipo E/S ¿Por Defecto?
------------------------------ ----------------------- ------ --------
注意,這個輸出是不同的:
select * from user_source
的可能重複[查詢搜索所有包表和/或列(http://stackoverflow.com/questions/ 4852993/query-to-search-all-packages-for-table-and-or-column) –
嗨,感謝您的重播。不,這不是重複的,因爲DESCRIBE子句描述了這個包中所有過程的參數。 – akolmogorov
'DESCRIBE'或'DESC'不是一個子句。這是一個SQL * Plus命令。 –