如何不使用dual表用SQL打印星号图案与垂直输出姓名
SQL不使用dual表的两个需求解法
(适用数据库:Oracle,原需求基于Oracle语法体系)
需求1:打印3行三角星号图案
要求输出效果:
* * * * * *
实现代码
我们可以用系统自带的all_objects视图(内置行数充足)替代dual生成行序列:
SELECT RPAD('* ', level * 2 - 1, ' ') FROM all_objects WHERE rownum <= 3 CONNECT BY level = rownum;
注:如果不需要星号间空格,和你原有逻辑保持一致的话,把SELECT后的内容换成
LPAD(' ', level, '*')即可。
需求2:垂直逐字符输出MANASI
要求输出效果:
M A N A S I
实现代码
同样基于序列生成逻辑,逐位截取字符串:
SELECT SUBSTR('MANASI', rownum, 1) FROM all_objects WHERE rownum <= LENGTH('MANASI');
如果不想依赖系统视图,也可以用递归CTE实现,完全不需要调用任何现有表:
WITH char_seq(pos) AS ( SELECT 1 FROM (SELECT 1) t UNION ALL SELECT pos + 1 FROM char_seq WHERE pos < LENGTH('MANASI') ) SELECT SUBSTR('MANASI', pos, 1) FROM char_seq;
内容的提问来源于stack exchange,提问作者Mansi Raval
相关产品推荐
相关产品推荐

