我真的对术语数据库、用户和模式感到困惑。谁能解释一下它们之间的区别(如果是的话)?
如果它们相同,那么它们之间有什么相似之处?我们如何使用它们?我们如何创建它们?
I want to connect to an oracle database located on another host using sqlplus. This page suggested adding an item on my tnsnames to conenct to that database
local_SID =
(DESCRIPTION =
(ADDRESS = (PROTOCOL= TCP)(Host= hostname.network)(Port= 1521))
(CONNECT_DATA = (SID = remote_SID))
)
Run Code Online (Sandbox Code Playgroud)
and then use that in sqlplus
sqlplus user/pass@local_SID
Run Code Online (Sandbox Code Playgroud)
However, in my circumstances modifying the local tnsnames is not possible. Is it possible to connect to a remote database just by using sqlplus argument without having to …
我有一张这样的表:
ID | Val | Kind
----------------------
1 | 1337 | 2
2 | 1337 | 1
3 | 3 | 4
4 | 3 | 4
Run Code Online (Sandbox Code Playgroud)
我想制作一个SELECT只返回每个 的第一行,按Val排序Kind。
示例输出:
ID | Val | Kind
----------------------
2 | 1337 | 1
3 | 3 | 4
Run Code Online (Sandbox Code Playgroud)
如何构建此查询?
我似乎记得(在 Oracle 上) utteringselect count(*) from any_table和select count(any_non_null_column) from any_table.
如果有的话,这两个陈述之间有什么区别?
我是 Oracle 数据库的新手。如果我理解正确的话,物化视图是将结果集保存为数据库中的物理表的视图,并且该视图/表根据某个参数进行刷新。如果视图保存为物理表,为什么不首先将数据存储到表中?那么使用物化视图代替表有什么好处呢?
我有一张有 100 列的表格。在SQL Plus输出换行中选择数据时,使其难以阅读。
我更喜欢的是出现一个水平滚动条,或者以某种方式将输出发送到 less
我在 SQLPlus 中运行以下语句 -
SET LINESIZE 32000;
SET PAGESIZE 40000;
SET LONG 50000;
SPOOL output.txt
SELECT * FROM big_table;
Run Code Online (Sandbox Code Playgroud)
然后在bash我跑 -
少输出.txt
输出仍然显示为已包装且不可读。
假设我有一个 Oracle 数据库。我有一个用户名 = x,密码 = y,数据库 = z。我也知道端口 = a,SID = b,主机名 = c。
那么我需要如何正确连接呢?我使用了许多选项,例如:
sqlplus x/y@'(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=c)(PORT=a))(CONNECT_DATA=(SID=z)(SERVER=DEDICATED)))'
sqlplus (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=c)(PORT=a))(CONNECT_DATA=(SID=b)))
Run Code Online (Sandbox Code Playgroud)
提交这些命令行通常会给我返回错误消息,例如:
ORA-12560:TNS:协议适配器错误
ORA-12514:TNS:侦听器当前不知道服务
提前谢谢了!!
在 Oracle 11.2 之前,我使用自定义聚合函数将一列连接成一行。11.2 增加了这个LISTAGG功能,所以我想改用它。我的问题是我需要消除结果中的重复项,但似乎无法做到这一点。
这是一个例子。
CREATE TABLE ListAggTest AS (
SELECT rownum Num1, DECODE(rownum,1,'2',to_char(rownum)) Num2 FROM dual
CONNECT BY rownum<=6
);
SELECT * FROM ListAggTest;
Run Code Online (Sandbox Code Playgroud)
CREATE TABLE ListAggTest AS (
SELECT rownum Num1, DECODE(rownum,1,'2',to_char(rownum)) Num2 FROM dual
CONNECT BY rownum<=6
);
SELECT * FROM ListAggTest;
Run Code Online (Sandbox Code Playgroud)
我想看到的是:
NUM1 NUM2
---------- ---------------------
1 2
2 2 << Duplicate 2
3 3
4 4
5 5
6 6
Run Code Online (Sandbox Code Playgroud)
这是一个listagg接近但不消除重复的版本。
SELECT Num1, listagg(Num2,'-') WITHIN GROUP (ORDER BY NULL) OVER …Run Code Online (Sandbox Code Playgroud) 每当我需要检查表中某行是否存在时,我总是倾向于编写如下条件:
SELECT a, b, c
FROM a_table
WHERE EXISTS
(SELECT * -- This is what I normally write
FROM another_table
WHERE another_table.b = a_table.b
)
Run Code Online (Sandbox Code Playgroud)
还有一些人这样写:
SELECT a, b, c
FROM a_table
WHERE EXISTS
(SELECT 1 --- This nice '1' is what I have seen other people use
FROM another_table
WHERE another_table.b = a_table.b
)
Run Code Online (Sandbox Code Playgroud)
当条件NOT EXISTS不是EXISTS: 在某些情况下,我可能会用 aLEFT JOIN和一个额外的条件(有时称为antijoin)来编写它:
SELECT a, b, c
FROM a_table
LEFT JOIN another_table ON another_table.b = …Run Code Online (Sandbox Code Playgroud) 有两种方法可以使用 sqlplus 以管理员身份连接到 Oracle:
sqlplus sys as sysdbasqlplus system/manager我想这些帐户应该用于不同的目的。
这两个模式用于哪些任务?我什么时候应该使用其中的一个?
oracle ×10
sqlplus ×3
aggregate ×2
count ×1
mysql ×1
null ×1
performance ×1
postgresql ×1
schema ×1
sql-server ×1
string ×1
users ×1
view ×1