我对SQL语言非常陌生,并尝试执行以下代码。它给我一个错误信息。我做错了什么?
错误讯息:
ORA-00928: missing SELECT keyword
00928. 00000 - "missing SELECT keyword"
代码:
WITH ABC(one,two,three)
AS(
select 25, 15,23 from dual
)
INSERT INTO ABC(one, two, three) VALUES (10,11,12)
select * from ABC;
非常感谢你!
编辑 - 解释
我需要创建超过100行的表。由于有足够的权限,我不允许创建新表,因此我尝试创建虚拟表。我脑海中的想法是使用For-loop将行插入虚拟表。但是,当我尝试插入任何记录时,会出现“缺少选择关键字”错误...
编辑 - 关于“非常非常新的SQL语言”一词 我目前是大学的计算机工程专业的学生,去年学过“数据库”课程。现在,我正在实习。所以喜欢..我不是一个需要w3school教程的初学者,但我是'现实生活中的SQL语言'的新手
答案 0 :(得分:2)
你需要另一个"表"返回所需的行数。在Oracle中,这通常使用connect by
运算符的未记录的功能来完成:
select level as rn
from dual
connect by level <= 100
&#34;未记录的&#34;部分是事实,没有真正的&#34;连接&#34;已完成,并且未提供start with
。查看手册中的connect by
以获取更多详细信息。
将返回100行。您可以将其与初始CTE结合使用,并进行交叉连接以将单行返回一百次:
WITH abc (one,two,three) AS (
select 25, 15,23 from dual
), num_rows as (
select level as rn
from dual
connect by level <= 100
)
select abc.*
from abc
cross join num_rows;
答案 1 :(得分:1)
为什么不尝试union all
这样:
WITH ABC(one,two,three)
AS(
select 25, 15,23 from dual union all
select 10,11,12 from dual
)
select * from ABC
答案 2 :(得分:0)
这将创建一个表
SELECT (21)as a,(22)as b,(23)as c
INTO #Test
SELECT * FROM #Test
这也将创建一个表。
SELECT *
INTO #TestTable
FROM dual
假设dual是数据库中的有效表。