【发布时间】:2015-05-06 20:06:35
【问题描述】:
我一直在研究如何在不使用“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:sentencia SQL no valida ORA-06512:en línea 12
当像这样修改“x”变量时:
x := 'BEGIN DESCRIBE '||item.OBJECT_NAME||'; END;';
我收到以下错误:
错误在线路 1:ORA-06550:线路 1,列 16:PLS-00103: 在预期以下情况之一时遇到符号“BVGKFDCS”: := 。 ( @ % ; 符号 ":=" 被替换为 "BVGKFDCS" 继续。 ORA-06512: 在线 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
【问题讨论】:
-
嗨,感谢重播。不,这不是重复的,因为 DESCRIBE 子句描述了此类包中所有过程的参数。
-
DESCRIBE或DESC不是子句。这是一个 SQL*Plus 命令。 -
谢谢,现在我知道了:)。
标签: oracle oracle11g sqlplus describe