「DESCRIBE table/view;」を使わずに TABLES や VIEWS を記述する方法を研究してきました。句。次のようなものを使用して解決できることがわかりました。
SELECT column_name, data_type, data_length, data_precision, data_scale, nullable
FROM all_tab_columns
WHERE table_name = 'TABLE'
これは、PHP のようなコンピューター言語で完全にプログラム可能ですが、'DESCRIBE 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: センテンシア SQL が有効ではありません ORA-06512: 12 行目です
そして、「x」変数を次のように変更すると:
x := 'BEGIN DESCRIBE '||item.OBJECT_NAME||'; END;';
次のエラーが表示されます。
行 1 のエラー: ORA-06550: 行 1、列 16: PLS-00103: 次のいずれかを予期しているときに、シンボル "BVGKFDCS" が検出されました: := 。( @ % ; 続行するには、記号 ":=" が "BVGKFDCS" の代わりに使用されました。ORA-06512: en linea 12
ここで、「BVGKFDCS」はスキーマのパッケージの 1 つの名前です。
前もって感謝します。
PD私はそのようなものを手に入れたいです(ただし、パッケージごとに):
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