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
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、复制放到记事本这个在我这不实在
如何在 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/sqldeveloper工具的sql窗口查询完毕点下拉(获取最后页)时候卡住,要很久才执行完,求解决办法。
为啥mssql的OPENQUERY取oracle某表时只返回了一行数据,而在pl/sql中可以查到表中有两行数据,求解答?