如何使用替换变量设置LINESIZE和PAGESIZE?

时间:2017-11-17 15:13:53

标签: oracle plsql sqlplus substitution

我正在尝试使用SQL * Plus中的PL / SQL脚本根据开发人员输入设置lineize和pagesize,以确定报表是以横向还是纵向打印。如果它是风景,我想要线条大小132和页面大小60.如果它是肖像,我分别想要88和80.

我正在尝试使用替换变量来这样做:

$('#customButton').on('click', function(e) {
  const params = new URLSearchParams(document.location.search)
  const amountInCents = params.get("amount")
  const displayAmount = parseFloat(amountInCents / 100).toFixed(2);
  // Open Checkout with further options
  handler.open({
    name: 'Demo Site',
    description: 'Custom amount ($' + displayAmount + ')',
    amount: amountInCents,
  });
  e.preventDefault();
});

// Close Checkout on page navigation
$(window).on('popstate', function() {
  handler.close();
});

然而,系统只是提示我手动输入行和页面的值。在SET命令中使用替换变量需要做什么?

2 个答案:

答案 0 :(得分:3)

使用the column .. new_value ... syntax

COLUMN Q_LINE NEW_VALUE LINE
COLUMN Q_PAGE NEW_VALUE PAGE

SELECT DECODE('&PRINT_ORIENTATION', 'PORTRAIT', 88, 'LANDSCAPE', 132) AS Q_LINE,
       DECODE('&PRINT_ORIENTATION', 'PORTRAIT', 80, 'LANDSCAPE', 60) AS Q_PAGE
FROM DUAL
/

SET LINESIZE &LINE
SET PAGESIZE &PAGE

这允许您从查询结果中定义替换值。

答案 1 :(得分:0)

使用“shell”替换变量:我们在这里处理类似问题的方法是在临时sql文件中生成正确的大小调整设置。

不确定它会有所帮助,但是这里有一个关于如何根据终端大小设置列数的提示,在@$HOME/sqlmlogin.sql中显示:

def_editor=emacs
set null °
set arraysize 1
set pagesize 0
set serveroutput on
host > $HOME/sqltmp_size.sql ; tty -s && ( eval $( resize ) ; echo "set lines $COLUMNS\n set pages 0" >> $HOME/sql/tmp_size.sql )
-- then call the temp script
@$HOME/sqltmp_size.sql
-- remove afterwards
host rm -f $HOME/sqltmp_size.sql

并按照以下方式致电sqlplus

sqlplus / @$HOME/sqlmlogin.sql

因此,您也可以通过类似的脚本为用户生成所需的静态值。