MS SqlServer中Oracle"双"表的等价物是什么?
这是我的Select:
SELECT pCliente,
'xxx.x.xxx.xx' AS Servidor,
xxxx AS Extension,
xxxx AS Grupo,
xxxx AS Puerto
FROM DUAL;
Run Code Online (Sandbox Code Playgroud) 在正常情况下(不使用SYS或可能使用它) -
SQL> select * from dual;
D
-
X
Run Code Online (Sandbox Code Playgroud)
在不太正常的条件下(连接为SYS) -
SQL> alter database close;
Statement processed.
SQL> select * from dual;
ADDR INDX INST_ID D
-------- ---------- ---------- -
00FA6E50 0 1 X
Run Code Online (Sandbox Code Playgroud)
我知道DUAL是一个特殊的魔术表(等等)但是
DUAL数据库何时处于待机状态有何不同?什么是相关性,如果ADDR,INDX,INST_ID在待机状态?
双表用于选择伪列.它有一行和一列DUMMY,其值为X.
我有两个问题
双能如何赋予价值例如:
select sysdate from dual
Run Code Online (Sandbox Code Playgroud)
将导致当前的日期时间.这怎么可能?
我正在寻找在不查询实际表的情况下运行(Oracle)SQL的可能性.在这里,我找到了DUAL表的提示.多数民众赞成.但我正在寻找一个简短的解决方案来从"无处"中选择MULTIPLE行.那可能吗?这是我能想到的最短的查询,它可以满足我的需求:
Select 1, 'foo' FROM DUAL union
Select 2, 'bar' FROM DUAL union
Select 3, 'more stuff' FROM DUAL
Run Code Online (Sandbox Code Playgroud)
但是如果我想在我的结果中有更多的行,那就太不方便了.有更短的方式吗?就像是
Select 1, 'foo'; 2, 'bar'; 3, 'more stuff' from dual
or
Select * from (1, 'foo') union (2, 'bar') union (3, 'more stuff')
Run Code Online (Sandbox Code Playgroud)
我知道,这不起作用,但你有什么想法吗?是否有一种简单的方法来转置查询的结果?就像是:
Select transposed (1, 'foo', 2, 'bar', 3, 'more stuff') from dual
Run Code Online (Sandbox Code Playgroud)
我希望将"开销字符"的数量保持在最低点.
我需要加入从我的程序中动态检索的动态数字列表。行数不是固定的,使用的数字也不是固定的。
我没有找到比以下更好的方法来实现这一点(就我而言,临时表没有帮助):
select 111 as col1, 322 as col2 from dual
union all
select 3 as col1, 14 as col2 from dual
union all
select 56 as col1, 676 as col2 from dual;
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?我看到有一个 connect by 语句可以返回多行,但我没有看到执行多行和多列的方法。
有没有办法从MySQL中的虚拟DUAL表中加入字段?
说我有一个
SELECT 1 as n1 FROM DUAL
n1
--
1
Run Code Online (Sandbox Code Playgroud)
和a
SELECT 2 as n2 FROM DUAL
n2
--
2
Run Code Online (Sandbox Code Playgroud)
我可以加入两种选择加入某种查询作为...
SELECT 1 as n1 FROM DUAL JOIN (SELECT 2 as n2 FROM DUAL) ON 1=1
Run Code Online (Sandbox Code Playgroud)
?
我在 Oracle 数据库上有以下 PL/SQL 存储过程:
PROCEDURE MyProcedure (
p_id IN NUMBER
, p_date IN DATE
, p_num IN NUMBER)
AS
BEGIN
MERGE INTO MY_TABLE mytable
USING (SELECT
p_id,
p_date,
p_num
FROM dual) temp
ON (mytable.myid = temp.p_id AND mytable.mydate = temp.p_date)
WHEN MATCHED THEN
UPDATE SET
DIFFERENCE = temp.p_num,
WHEN NOT MATCHED THEN
INSERT VALUES (
MY_TABLEIDSEQ.NEXTVAL,
temp.p_id,
temp.p_date,
temp.p_num);
END MyProcedure;
Run Code Online (Sandbox Code Playgroud)
MY_TABLE表定义如下:
CREATE TABLE "MY_DBO"."MY_TABLE"
(
"MYTABLEID" NUMBER(38,0),
"MYID" NUMBER(38,0),
"MYDATE" DATE,
"MYNUM" NUMBER(25,4)
)
Run Code Online (Sandbox Code Playgroud)
但是,当我使用输入字段的有效值运行存储过程时,出现以下错误:
ORA-00904: "TEMP"."P_DATE": 无效标识符 …
所以我无法创建或编辑表(我是具有只读权限的用户)并且我想查找 10,000 个唯一 ID。我无法将它们放在 IN() 语句中,因为 oracle 限制超过 1000 个项目。
是否可以从 oracle 中的 DUAL 表中选择整个列表?就像是:
select
'id123,id8923,id32983,id032098,id308230,id32983289'
from DUAL
Run Code Online (Sandbox Code Playgroud) 在 Oracle 中,我们可以编写它来使用SELECT语句生成单行。
SELECT 1 AS x FROM dual
Run Code Online (Sandbox Code Playgroud)
Teradata 的等价物是什么?
dual-table ×11
oracle ×9
sql ×4
date ×1
join ×1
merge ×1
mysql ×1
ora-00904 ×1
sql-server ×1
teradata ×1