【发布时间】:2015-08-05 04:34:02
【问题描述】:
我试图在不使用DESCRIBE 命令的情况下描述一个表,但我想将查询与substitution variable 结合起来。假设我有下表:
--DROP TABLE customers CASCADE CONSTRAINTS PURGE;
CREATE TABLE customers
( customer_id number(10) NOT NULL,
customer_name varchar2(50) NOT NULL,
city varchar2(50)
);
按照here 和here 的帖子,但添加了一个替换变量,我有以下内容:
ACCEPT myv CHAR PROMPT 'Enter a table name: '
SELECT
column_name AS "Name",
nullable AS "Null?",
concat(concat(concat(data_type,'('),data_length),')') AS "Type"
FROM user_tab_columns
WHERE table_name = '&myv';
这会返回一个带有适当列名的空白表。我在输入提示中输入的表名是 CUSTOMERS 还是customers 都没有关系。但是,desc customers 会产生:
Name Null Type
------------- -------- ------------
CUSTOMER_ID NOT NULL NUMBER(10)
CUSTOMER_NAME NOT NULL VARCHAR2(50)
CITY VARCHAR2(50)
知道如何让替换变量在这里工作吗?谢谢。
【问题讨论】:
-
我问一下隐藏的假设,只是为了确定——你真的在 Oracle SQL*Plus 中运行这个代码 sinppet 吗?或者也许在另一个客户中?
-
我在sql developer中运行过。
-
我已经在我的 Sql Developer 上测试了这个查询,我使用的是 4.1.0.19 版本,它运行良好。您可以在 WHERE 条件中使用
UPPER函数来更改字符的大小写:WHERE table_name = UPPER('&myv');。您还可以附加:SELECT UPPER('&myv') FROM DUAL;进行调试,以检查输入的表名是否正确。 -
嗯,我被难住了。使用
UPPER似乎并没有改变任何东西。我正在使用版本 4.0.3.16。 “追加”是指执行以下操作:ACCEPT myv CHAR PROMPT 'Enter a table name: ' SELECT UPPER('&myv') FROM DUAL;。
标签: oracle oracle11g substitution data-dictionary