在SELECT查询中包含DISTINCT是否意味着应该对结果集进行排序?
我不认为它,但我正在寻找一个权威的答案(网络链接).
我有这样的查询:
Select Distinct foo
From Bar
Run Code Online (Sandbox Code Playgroud)
在oracle中,结果是截然不同的,但不是按排序顺序排列的.在Jet/MS-Access中,似乎还有一些额外的工作要确保结果是排序的.我假设oracle在这种情况下遵循规范并且MS Access已经超越了.
另外,有没有办法可以给表提示它应该排序foo(除非另有说明)?
我刚刚安装了Oracle,我正在使用SQL*Plus,因为GUI工具SQL Developer无法运行.
我需要运行一些脚本,我发现在启动SQL Plus后,我无法从会话导航到另一个目录.我在互联网上搜索后发现的说明都是关于SQL Plus 的gui接口,它在版本11上不再可用.我得到的只是一个控制台窗口.
现在,我通过创建一个快捷方式然后将起始目录更改为脚本所在的目录来破解我的工作方式.
我可以继续这样做,但我想知道是否有一个命令让我知道a)当前的工作目录和b)如何更改目录
提前致谢,
雨果
我的要求是将sqlplus操作的结果存储到我的shell脚本中的变量中.我需要在我的.sh文件中执行以下操作的结果
sqlplus 'user/pwd' @test.sql
Run Code Online (Sandbox Code Playgroud)
我已经尝试过了
testvar = 'sqlplus 'user/pwd'
@test.sql'
Run Code Online (Sandbox Code Playgroud)
但这不起作用.
我改成了
testvar=sqlplus foo/bar@SCHM @test.sql
Run Code Online (Sandbox Code Playgroud)
它说
SQL*Plus:: not found [No such file or directory]
我试过了
testvar=$(sqlplus foo/bar@SCHM
@test.sql)
Run Code Online (Sandbox Code Playgroud)
它给出了同样的错误.当我尝试没有像下面的变量赋值
sqlplus foo/bar@schm @test.sql
Run Code Online (Sandbox Code Playgroud)
它工作正常
在Oracle中使用以下两个表:
Create Table A
( A int, B int, C int,
Constraint pk_ab Primary Key(A, B),
Unique (C)
);
Create Table B
( D int, E int, F int,
Constraint fk_d Foreign Key (D) References A(A),
Constraint fk_e Foreign Key (E) References A(B)
);
Run Code Online (Sandbox Code Playgroud)
为什么这个陈述不起作用?或者更具体地说,为什么它不起作用?我试图创建这种关系的原因是,在将来,我想删除B.D,但保持关系FK_E.
我收到错误:
ORA-02270:此列列表没有匹配的唯一键或主键
我select在命令提示符下运行了简单查询,但输出行不在一行中.见下文:
SQL> set pagesize 2000
SQL> select * from xtern_empl_rpt ;
EMP LAST_NAME
--- --------------------------------------------------
FIRST_NAME SSN
-------------------------------------------------- ---------
EMAIL_ADDR
--------------------------------------------------------------------------------
YEARS_OF_SERVICE
----------------
001 Hutt
Jabba 896743856
jabba@thecompany.com
18
002 Simpson
Homer 382947382
homer@thecompany.com
20
003 Kent
Clark 082736194
superman@thecompany.com
5
004 Kid
Billy 928743627
billythkid@thecompany.com
9
005 Stranger
Perfect 389209831
nobody@thecompany.com
23
006 Zoidberg
Dr 094510283
crustacean@thecompany.com
1
6 rows selected.
SQL>
Run Code Online (Sandbox Code Playgroud)
你能帮我把每一行写成一行吗?
编辑
我试过下面,但仍然没有美化.
SQL> SET LINESIZE 4000
SQL> select * from xtern_empl_rpt ;
EMP LAST_NAME …Run Code Online (Sandbox Code Playgroud) 例如,执行用于显示各种列的长语句时的问题之一
select g.guestid, g.forename, g.surname, b.bookingid,
b.arrivedate, b.departdate, br.floorno, br.roomno from...
Run Code Online (Sandbox Code Playgroud)
Linux终端上的列大小似乎是一个问题.例如,Forename VarChar(80)列在执行上述语句时占用屏幕的大部分宽度,并且一种方法可以通过以下方式将其删除:
SET COLUMN FORENAME FORMAT A10
Run Code Online (Sandbox Code Playgroud)
例如.但是,许多专栏需要反复进行,这很长.即
SET COLUMN FORENAME FORMAT A10
SET COLUMN SURNAME FORMAT A10
Run Code Online (Sandbox Code Playgroud)
等等...
有没有办法说根据文字宽度调整列宽,以便每个人都很好地适应.而不是这样..

我更喜欢一些不涉及使用FUNCTIONS的解决方案.
我正在尝试在sqlplus中假脱机大查询但由于某种原因,我确实每558行有2个空行.
我是这样的假脱机:
SET TERMOUT OFF
SET ECHO OFF
SET LINES 1000
SET FEEDBACK off
SET HEADING OFF
SET ARRAYSIZE 10000
SET NEWPAGE NONE
SET PAGESIZE 0
SET TRIMSPOOL ON
Spool D:\IPORT15.csv
select query
Spool OFF;
EXIT
Run Code Online (Sandbox Code Playgroud)
我以为SET NEWPAGE应该照顾那个?
我知道数据库引擎本身(经常)在另一台机器上并且SQL*Plus没有直接读取这些环境变量的方法,但是我处于一个棘手的情况,我只需要来自机器的环境变量客户端本身正在运行.
有没有办法在一个将在SQL*Plus中运行的单个脚本中将这些值欺骗到SQL*Plus客户端?该脚本由一个开始/结束PL/SQL块组成,但是如果我需要使用set/define/variable排序的SQL*Plus指令,这也不应该是一个问题.
我不能做的是改变SQL*Plus可执行文件本身的启动方式(我没有权限将值作为参数传递).
有没有办法实现这个目标?
注意:dbms_system.get_env()似乎从服务器本身检索环境变量,这是我不想要的.
我想知道是否有可能以sqlplus某种方式获取输出以发现我的数据库是否已启动.
我想在数据库上运行脚本列表,但在此之前,我想知道数据库是否已启动并运行我的脚本.
这是我尝试过的:
sqlplus /@DB1 << EOF
> select 1 from dual;
> EOF
Run Code Online (Sandbox Code Playgroud)
它无法连接,但sqlplus的返回码仍然说"一切正常"!
SQL*Plus: Release 11.2.0.4.0 Production on Mon Nov 28 10:06:41 2016
Copyright (c) 1982, 2013, Oracle. All rights reserved.
ERROR:
ORA-12505: TNS:listener does not currently know of SID given in connect
descriptor
Enter user-name: SP2-0306: Invalid option.
Usage: CONN[ECT] [{logon|/|proxy} [AS {SYSDBA|SYSOPER|SYSASM}] [edition=value]]
where ::= [/][@]
::= [][/][@]
Enter user-name: ju@srv:/tmp/jcho $ echo $?
0
我知道我可以grep我的测试查询的结果,像这样:
sqlplus /@DB1 << EOF
select 'ALL_GOOD_BOY' from …Run Code Online (Sandbox Code Playgroud)