SQL Developer 脚本输出到数据网格

Posted

技术标签:

【中文标题】SQL Developer 脚本输出到数据网格【英文标题】:SQL Developer script output to datagrid 【发布时间】:2018-03-28 21:12:55 【问题描述】:

在 Oracle SQL Developer 中,我可以在“查询结果”网格中返回简单的查询结果,但如果我需要在脚本中使用变量,我需要使用“运行脚本”选项,我的结果会显示在“ “脚本输出”窗口,我无法将其导出为 csv 格式。这是我的示例代码:

    var CatCode char(5) ;
    exec :CatCode := 'ZK';
    SELECT * FROM Products WHERE CategoryCode = :CatCode;

任何帮助将不胜感激。 谢谢。

【问题讨论】:

【参考方案1】:

只需将/*csv*/ 添加到您的查询中,该工具将在作为脚本执行时自动以 CSV 格式返回输出 (F5)。

或者使用替代变量。 &Var vs :Var,按F9运行,SQLDev会提示你输入值。

VAR stcode CHAR(2);

EXEC :stcode := 'NC';

SELECT /*csv*/
    *
  FROM
    untappd
 WHERE
    venue_state   =:stcode;

或直接进入网格,以便您可以使用网格导出功能。

SELECT
    *
  FROM
    untappd
 WHERE
    venue_state   =:stcode2;

使用 Ctrl+Enter 或 F9 执行

在弹出的对话框中提供输入参数,点击确定。

沙赞。

【讨论】:

是的,它可以工作,但我需要在数据网格中使用它。我的查询返回 50K+ 记录,我需要将其导出到 csv。我没有足够的权限来创建程序,所以我只能在工作表中进行。有没有其他解决方案可以将查询结果导出到 csv 中? 在我的实际查询中有大量变量,大多数时候它会有默认值。所以我不想要任何值的弹出窗口,而是我会在脚本中更改并运行。 @mak101 所以不要那样做,将其作为脚本运行,使用 CSV 注释,并将其作为文件假脱机。它会运行得更快,步骤更少。 @mak101 您可以使用我的解决方案将 50k 记录假脱机到 CSV...或稍有变化【参考方案2】:

你可以运行这个来确保。它正在运行。

    set colsep ,     -- separate columns with a comma
    set pagesize 0   -- No header rows
    set trimspool on -- remove trailing blanks
    set headsep off  -- this may or may not be useful...depends on your headings.
    set linesize X   -- X should be the sum of the column widths
    set numw X       -- X should be the length you want for numbers (avoid scientific notation on IDs)

    spool C:\Users\**direcotory**\sql\Test1.csv; --this is file path to save data
    var CatCode char(5) ;
    exec :CatCode := 'ZK';
    SELECT * FROM Products WHERE CategoryCode = :CatCode;
    spool off;

【讨论】:

【参考方案3】:

感谢@thatjeffsmith 和 Paras,spool 选项给了我新的方向,它奏效了。我稍微修改了你的代码,效果很好。

var CatCode char(5) ;
exec :CatCode := 'ZK';
set feedback off;
SET SQLFORMAT csv;
spool "c:\temp\spoolTest.csv"
SELECT * FROM Products WHERE CategoryCode = :CatCode;
spool off;
SET SQLFORMAT;
set feedback on;

【讨论】:

我还有一个问题,我如何假脱机到动态文件?我想在我的文件名中添加 CatCode,我试过: var csvFile varchar2(100) exec :csvFile := 'c:\temp\MyCSV_' ||修剪(:CatCode) || '.csv'; spool csvFile 但它不起作用。有什么建议吗?

以上是关于SQL Developer 脚本输出到数据网格的主要内容,如果未能解决你的问题,请参考以下文章

SQL Developer:从 SQL 脚本输出中删除科学记数法?

Oracle SQL Developer - 缺少网格的查询结果窗口

SQL Developer 脚本输出截断 sys_refcursor 宽度

如何在 SQL Developer 中的 PLSQL 错误后抑制脚本显示(禁用命令/代码输出)

在 SQL Developer 中使用服务器输出或 DBMS_OUTPUT

如何使用 SQL Developer 假脱机到 CSV 文件?