Oracle PL/SQL查询结果如何自动换行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle PL/SQL查询结果如何自动换行相关的知识,希望对你有一定的参考价值。

在ORACLE自带的SQL Plus中是可以设置SQL> SET LINESIZE 100 ,但我想在工具PL/SQL中也按照一定的长度设置自动换行,怎么办?因为我是先查询字段的内容插入文本框,再将这个文本框的内容作为正文推送到邮件系统的,所以我需要设置查询出来的内容每行最大字符长度,不然到了邮件系统有可能每行就会变得很长很长
例如原来查询结果是:
1)XXX
2)XXXXXX
3)XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
想要得到的效果是:
1)XXX
2)XXXXXX
3)XXXXXXXXXXXXXX
XXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXX
XXX

可以在SQL语句中加换行符CHR(10)实现,比如字段A长度为150,SQL可以这么写
select substr(t.A, 0, 100) || char(10) ||substr(t.a, 101, len(t.a)) from table t
或者你也可以将内容复制出来,放入一个自动换行的记事本,保存之后就是换行后的结果,至于每行字符数量,你可以根据你的需要调整记事本窗口的宽度完成,但是一定要保存之后才有效果追问

1、select substr(t.A, 0, 100) || char(10) ||substr(t.a, 101, len(t.a)) from table t

这个只能针对数据量很小的才有可能,但对于数据量很长,字段很多的话就不适用了,就是用循环好像效果也不好
2、复制放到记事本这个在我这不实在

参考技术A 在工具的设置里面有 参考技术B 在尾巴加上换行符啊 比如 SELECT '2012'|| CHR(10) FROM dual; 参考技术C 具体自己找

如何在 oracle pl/sql 语句中声明查询?

【中文标题】如何在 oracle pl/sql 语句中声明查询?【英文标题】:How do I declare a query in an oracle pl/sql statement? 【发布时间】:2016-01-19 21:28:17 【问题描述】:

我对 Oracle 还很陌生,但我的任务是编写此声明。

BEGIN
FOR partition IN 1..32 LOOP
    lQuery := 'UPDATE CORE.tbl PARTITION(tbl' || LPAD(partition, 2, '0') || ') SET p = NULL '
           || 'WHERE p IS NOT NULL';

    EXECUTE IMMEDIATE lQuery;
END LOOP;
END;

但是,我收到以下错误

Error starting at line 1 in command:
BEGIN
FOR partition IN 1..32 LOOP
    lQuery := 'UPDATE CORE.user_login PARTITION(user_login' || LPAD(partition, 2, '0') || ') SET password_md5 = NULL '
           || 'WHERE password_md5 IS NOT NULL';

    EXECUTE IMMEDIATE lQuery;
END LOOP;
END;
Error report:
ORA-06550: line 3, column 5:
PLS-00201: identifier 'LQUERY' must be declared
ORA-06550: line 3, column 5:
PL/SQL: Statement ignored
ORA-06550: line 6, column 23:
PLS-00201: identifier 'LQUERY' must be declared
ORA-06550: line 6, column 5:
PL/SQL: Statement ignored
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

当我尝试运行它时。我知道这可能是因为没有声明lQuery,但是在线谷歌搜索向我展示了声明某种类型的变量的示例,例如(整数、varchar 等),但没有一个显示如何将查询声明为该语句预计。

【问题讨论】:

您的lQuery 只是一个变量,应该被视为一个变量。它需要被声明(作为一些类似字符串的值,例如VARCHAR2)。 您确定需要遍历分区吗?使用名为USER_LOGIN 的表,您的系统应该能够在一个语句中更新整个内容。 (另外,+1 用于删除不安全的 M5 密码哈希!) What am I doing wrong in this Oracle SQL Update query that's supposed run across partitions?的可能重复 【参考方案1】:

您的语句可以简单地声明为 varchar2。例如:

declare
  vsql varchar2(1000);
  n   integer;
begin
  vsql := 'select 1 from dual';
  execute immediate vsql into n;
  dbms_output.put_line(n);
end;

【讨论】:

以上是关于Oracle PL/SQL查询结果如何自动换行的主要内容,如果未能解决你的问题,请参考以下文章

如何使用PL/SQL工具将oracle数据导出到excel

pl/sql 把查询结果导出为dmp文件

pl/sqldeveloper工具的sql窗口查询完毕点下拉(获取最后页)时候卡住,要很久才执行完,求解决办法。

为啥mssql的OPENQUERY取oracle某表时只返回了一行数据,而在pl/sql中可以查到表中有两行数据,求解答?

pl/sql developer中文乱码,为啥呢?怎么解决?Oracle问题

PL/SQL 查询结果采用科学计数法,如何改变属性。