2010-11-10 48 views
2

我想知道SET FMTONLY ON是否可以在Oracle查询中使用。当我使用的是这样的:在Oracle查询中设置FMTONLY ON

SET FMTONLY ON select * from department 

我得到的消息是这样的:

1号线:SQLPLUS命令跳过:FMTONLY设置为ON SELECT * FROM部门

我正在寻找在Oracle中的一个声明,即

仅返回元数据到客户端以测试响应的格式而不实际运行查询。

编辑

谢谢....我想要的东西通用于所有类型的查询,如果查询包含任何那么我们可以不加这个“按订单”。如果它是一个插入查询,它应该只是验证查询,现在我正在回滚验证查询(然后在运行时执行它)SET FMTONLY帮助我在SQL中实现它,在Oracle中类似? ??。

和“CREATE TABLE FormatTest AS(SELECT ...),然后执行DESCRIBE FormatTest”。我没有得到这一个:(

任何帮助表示赞赏。

+0

“SET FMTONLY ON”是一个MS SQL Server命令,所以我不确定你为什么期望它在Oracle中工作! – 2010-11-10 10:19:51

+0

Oracle中是否有等价物? – Tina 2010-11-10 10:34:53

回答

2

这是不太一样的,但你可以添加WHERE rownum<=1到您的查询。这将允许您根据一行来评估格式。

它有点矫枉过正,但你可以做CREATE TABLE FormatTest AS (SELECT ...),然后做一个DESCRIBE FormatTest

编辑:基于

您最近的编辑听起来像是在寻找声明验证而不是布局,在这种情况下,Janek Bogucki或Jeffrey Kemp有更好的答案。

1

看看DBMS_SQL.DESCRIBE_COLUMNS。这是将每一列返回的数据,

alt text

这将与任何select语句工作据我所知,比如我通过修改Example 8: Describe Columns尝试这样的查询和它的工作,

DBMS_SQL.PARSE(c, 'SELECT sysdate, b.* FROM scott.bonus b', DBMS_SQL.NATIVE); 

col_type = 12 
col_maxlen = 7 
col_name = SYSDATE 
col_name_len = 7 
col_schema_name = 
col_schema_name_len = 0 
col_precision = 0 
col_scale = 0 
col_null_ok = true 
col_type = 1 
col_maxlen = 10 
col_name = ENAME 
col_name_len = 5 
col_schema_name = 
col_schema_name_len = 0 
col_precision = 0 
col_scale = 0 
col_null_ok = true 
col_type = 1 
col_maxlen = 9 
col_name = JOB 
col_name_len = 3 
col_schema_name = 
col_schema_name_len = 0 
col_precision = 0 
col_scale = 0 
col_null_ok = true 
col_type = 2 
col_maxlen = 22 
col_name = SAL 
col_name_len = 3 
col_schema_name = 
col_schema_name_len = 0 
col_precision = 0 
col_scale = -127 
col_null_ok = true 
col_type = 2 
col_maxlen = 22 
col_name = COMM 
col_name_len = 4 
col_schema_name = 
col_schema_name_len = 0 
col_precision = 0 
col_scale = -127 
col_null_ok = true 

PL/SQL procedure successfully completed. 
+0

我的appologies,你是对的。我删除了我的评论。 – 2010-11-11 21:57:09

+0

+1一直学习新东西。 – 2010-11-11 22:06:55

2

thisSET FMTONLY ON:只有

元数据返回到t他的客户。 可以用于测试 响应的格式,而无需实际运行 查询。

由于SET FMTONLY打开时的请求,没有行被处理或发送到 客户端。

因此,我猜测结果是(a)声明成功,没有任何反应;或(b)陈述失败,并引发例外。

因此,你可以通过运行EXPLAIN PLAN FOR xxx如果语句成功,那么语句可以认为是语法上有效的实现在Oracle中类似的效果,例如:

SQL> EXPLAIN PLAN FOR insert into baddml values (1); 
explain plan for INSERT INTO baddml VALUES (1) 
          * 
ERROR at line 1: 
ORA-00942: table or view does not exist 

+0

+1这似乎是寻求声明验证的最简单途径。 – 2010-11-11 22:07:45