SELECT * FROM Table A LEFT JOIN TABLE B LEFT JOIN TABLE C
Run Code Online (Sandbox Code Playgroud)
从上面的代码片段,表C将连接到(表B)或(表A LEFT JOIN表B中的数据)或(表A)?
假设我们在表中有3条记录:orig_tab
---------------------------------------------
| PK | Name | Address | Postal Code |
---------------------------------------------
| 1 | AA | Street1 | 11111 |
| 2 | BB | Street2 | 22222 |
| 3 | CC | Street3 | 33333 |
---------------------------------------------
Run Code Online (Sandbox Code Playgroud)
现在数据发生了变化:
---------------------------------------------
| PK | Name | Address | Postal Code |
---------------------------------------------
| 1 | AA | Street1 | 11111 |
| 2 | BB | Street2 | 44444 |
| 3 | CC | Dtreet7 | 33333 …Run Code Online (Sandbox Code Playgroud) 如何在SQL Developer中停止导出过程?
我有一个表(称之为my_table),可以像这样简化:NAME,SEQ_NO,LOCKED.
项目被删除并添加,我想重新排序它们(修改SEQ_NO),顺序总是从1到COUNT(*),并且被锁定的项保留它们的SEQ_NO,没有未锁定的项目将获得该数字.仅使用新的SEQ_NO更新未锁定的项目.
例:
这个
NAME SEQ_NO LOCKED Foo 1 N Bar 3 Y Abc 4 Y Baz 5 N Cde 7 N
会导致:
NAME SEQ_NO LOCKED Foo 1 N Baz 2 N Bar 3 Y Abc 4 Y Cde 5 N
我怎么能这样做?
如果我跑
bash -x myscript.sh
Run Code Online (Sandbox Code Playgroud)
我会得到调试输出.
但是如果我有一个函数myscript.sh,函数中的代码不受-x选项的影响.它只写输出函数的名称.
如何在bash脚本中获取函数的调试输出?
更新:
在ztank1013的回复之后,我才意识到我使用的是ksh,而不是bash.似乎bash默认情况下在我的系统中启用了functrace选项(感谢bash-o-logist)
我很满意,但对于社区我维持ksh的问题.
对于脚本:
#!/bin/ksh
a=2
testering(){
a=3
if [ $a -eq 3 ]; then
echo lili
fi
}
if [ $a -eq 2 ]; then
echo mimi
fi
testering
exit
Run Code Online (Sandbox Code Playgroud)
输出ksh -x ./testdebug.sh是:
+ a=2
+ [ 2 -eq 2 ]
+ echo mimi
mimi
+ testering
lili
+ exit
Run Code Online (Sandbox Code Playgroud)
那么,对于ksh来说,有什么诀窍呢?
(如果没有答案,'正确'将转到bash-o-logist.)
我注意到Oracle 11中出现了一个奇怪的FULL OUTER JOIN行为.我正在从HR模式加入表,特别是EMPLOYEES和DEPARTMENTS.
例如,以下查询返回123行:
SELECT * FROM employees e
FULL JOIN departments d ON e.department_id = d.department_id
Run Code Online (Sandbox Code Playgroud)
但是,要理解的是什么 - 当我在select子句中放入一组特定的列时,查询将返回122行(缺少的行是针对没有分配部门的员工 - 另一个是使用左连接返回的行)与内连接相比):
SELECT first_name, last_name, department_name FROM employees e
FULL JOIN departments d on e.department_id = d.department_id
Run Code Online (Sandbox Code Playgroud)
即使我计算行数它返回122(COUNT(*))!到底是怎么回事?SELECT *和之间有什么区别SELECT COUNT(*)?
解释计划SELECT * ...:
SELECT STATEMENT 122
VIEW VW_FOJ_0 122
HASH JOIN FULL OUTER 122
Access Predicates
E.DEPARTMENT_ID = D.DEPARTMENT_ID
TABLE ACCESS DEPARTMENTS FULL 27
TABLE ACCESS EMPLOYEES FULL 107
Run Code Online (Sandbox Code Playgroud)
并为SELECT …
假设您有以下更新:
Update table set col1 = func(col2)
where col1<>func(col2)
Run Code Online (Sandbox Code Playgroud)
该FUNC函数为每个行计算两次,每行,或一次?
谢谢,
我有一个关于假脱机程序结果的问题.我的示例sql脚本看起来像这样.
whenever sqlerror exit failure rollback
set heading off
set arraysize 1
set newpage 0
set pages 0
set feedback off
set echo off
set verify off
declare
ab varchar2(10) := 'Raj';
cd varchar2(10);
a number := 10;
c number;
d number;
begin
c := a+10;
select ab,c into cd,d from dual;
end;
SPOOL
select cd,d from dual;
SPOOL OFF
EXIT;
Run Code Online (Sandbox Code Playgroud)
上面的脚本不起作用,但我想做这样的事情,在开始结束块我们计算一些值,我想假设这些结果.
谢谢.
我想知道核心原因(引擎所做的段,块,锁的机制)为什么批量插入(使用直接路径)锁定整个表,所以如果我插入分区,我不能截断另一个分区插入不会影响(显然)
传统的插入(没有附加提示)允许截断一些不受影响的分区.(注意我说的是非提交的事务.)
下面举例说明它.
让我们成为一张桌子:
CREATE TABLE FG_TEST
(COL NUMBER )
PARTITION BY RANGE (COL)
(PARTITION "P1" VALUES LESS THAN (1000),
PARTITION "P2" VALUES LESS THAN (2000));
Insert into table fg_test values (1);
insert into table fg_test values (1000);
commit;
Run Code Online (Sandbox Code Playgroud)
第一节:
insert into table fg_test select * from fg_test where col >=1000;
--1 rows inserted;
Run Code Online (Sandbox Code Playgroud)
第二节:
alter table fg_test truncate partition p1;
--table truncated
Run Code Online (Sandbox Code Playgroud)
第一节:
rollback;
insert /*+append */ into table fg_test select * from fg_test where col >=1000;
--1 rows …Run Code Online (Sandbox Code Playgroud)