25. SQL> create user DEV_TESTING
2
identified by MYPASS;
create user DEV_TESTING identified by MYPASS
*
ERROR at line 1:
ORA-65096: invalid common user or role name
?
21
40. SQL> desc T
Name
----------------------------OWNER
OBJECT_NAME
Null?
-------NOT NULL
NOT NULL
Type
------------VARCHAR2(30)
VARCHAR2(30)
SQL> desc T_AUDIT
Name
----------------------------AUDIT_DATE
AUDIT_ACTION
OWNER
OBJECT_NAME
Null?
Type
-------- -------------DATE
CHAR(1)
NOT NULL VARCHAR2(30)
NOT NULL VARCHAR2(30)
35
41. SQL>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
create or replace
trigger AUDIT_TRG
after insert or update or delete on T
for each row
declare
v_action varchar2(1) := case when updating then 'U'
when deleting then 'D' else 'I' end;
begin
if updating or inserting then
insert into T_AUDIT
values (sysdate
,v_action
,:new.owner
,:new.object_name);
else
insert into T_AUDIT
values (sysdate
,v_action
,:old.owner
,:old.object_name);
end if;
end;
/
Trigger created.
36
59. SQL> alter table EMP add
2
LAST_MOD timestamp default systimestamp;
SQL> update EMP
2 set
sal = sal*10
3 where empno = 7369;
SQL> delete from EMP
2 where empno = 7934;
SQL> update EMP
2 set
job = 'SALES'
3 where ename = 'SMITH';
SQL> update EMP
2 set
comm = 1000
3 where empno = 7369;
SQL> commit;
59
60. SQL>
2
3
4
5
6
7
8
select empno, ename, job, sal, comm,
nvl(VERSIONS_STARTTIME,LAST_MOD) TS
,nvl(VERSIONS_OPERATION,'I') op
from EMP
versions between timestamp
timestamp '2014-02-11 20:12:00' and
systimestamp
order by empno;
EMPNO
---------7369
7369
7499
7521
7566
...
7900
7902
7934
7934
ENAME
---------SMITH
SMITH
ALLEN
WARD
JONES
JOB
SAL
COMM TS
--------- ---------- ---------- -----------CLERK
806
08.10.51 PM
SALES
8060
1000 08.12.10 PM
SALESMAN
1606 300000000 08.10.51 PM
SALESMAN
1256 500000000 08.10.51 PM
MANAGER
2981
08.10.51 PM
O
I
U
I
I
I
JAMES
FORD
MILLER
MILLER
CLERK
ANALYST
CLERK
CLERK
I
I
I
D
956
3006
1306
1306
08.10.51
08.10.51
08.10.51
08.12.10
PM
PM
PM
PM
60
102. SQL> alter table child modify
2
constraint CHILD_FK on delete cascade;
ERROR at line 1:
ORA-00933: SQL command not properly ended
SQL> alter table child add
2
constraint NEW_FK foreign key ( p )
3
references parent ( p ) on delete cascade;
ERROR at line 1:
ORA-02275: such a referential constraint already
exists in the table
95
121. SQL> create sequence seq;
Sequence created.
SQL> create table T ( pk number
, c1 int);
Table created.
SQL>
2
3
4
5
6
7
8
create or replace
trigger FILL_IN_PK
before insert on T
for each row
begin
select seq.nextval into :new.pk from dual;
end;
/
Trigger created.
114
122. SQL> insert into T values (10,20);
1 row created.
SQL> select * from T;
PK
C1
---------- ---------1
20
115
124. SQL>
2
3
4
5
6
7
8
9
create or replace
trigger FILL_IN_PK
before insert on T
for each row
when ( new.pk is null )
begin
select seq.nextval into :new.pk from dual;
end;
/
Trigger created.
SQL> insert into T values (20,20);
1 row created.
SQL> select * from T;
PK
C1
---------- ---------1
20
20
20
117
134. SQL> drop table t purge;
Table dropped.
SQL> create table T
2
( pk number generated as identity ,
3
c1 int);
Table created.
SQL> select object_id, object_name,
2
object_type from user_objects;
OBJECT_ID
---------414914
414915
OBJECT_NAME
-----------------T
ISEQ$$_414914
OBJECT_TYPE
-----------TABLE
SEQUENCE
127
135. SQL> @pr "select * from user_sequences"
SEQUENCE_NAME
MIN_VALUE
MAX_VALUE
INCREMENT_BY
CYCLE_FLAG
ORDER_FLAG
CACHE_SIZE
LAST_NUMBER
PARTITION_COUNT
SESSION_FLAG
KEEP_VALUE
:
:
:
:
:
:
:
:
:
:
:
ISEQ$$_414914
1
9999999999999999999999
1
N
N
20
1
N
N
128
136. SQL> create table T
2
( pk number
3
generated as identity (cache 1000)
4
, c1 int);
Table created.
SQL> insert into T values (1,2);
insert into T values (1,2)
*
ERROR at line 1:
ORA-32795: cannot insert into a generated always
identity column
can choose
129
142. SQL>
2
3
4
5
6
7
8
9
10
11
12
create or replace
procedure ins(p_pk int, p_status varchar2) is
begin
if p_status is null then
insert into T (pk, status)
values (p_pk, default );
else
insert into T (pk, status)
values (p_pk, p_status );
end if;
end;
/
Procedure created.
135
164. DECODE(BITAND("A209"."PROPERTY",8192),8192,'NESTED TABLE','TABLE')
"OBJECT_TYPE",
2 "OBJECT_TYPE_ID",5 "SEGMENT_TYPE_ID",
"A209"."OBJ#" "OBJECT_ID",
"A209"."FILE#" "HEADER_FILE",
"A209"."BLOCK#" "HEADER_BLOCK",
"A209"."TS#" "TS_NUMBER" FROM "SYS"."TAB$" "A209" WHERE
BITAND("A209"."PROPERTY",1024)=0) UNI
ON ALL (SELECT 'TABLE PARTITION' "OBJECT_TYPE",19 "OBJECT_TYPE_ID",5
"SEGMENT_TYPE_ID",
"A208"."OBJ#" "OBJECT_ID",
"A208"."FILE#" "HEADER_FILE",
"A208"."BLOCK#" "HEADER_BLOCK",
"A208"."TS#" "TS_NUMBER" FROM "SYS"."TABPART$" "A208") UNION ALL
(SELECT 'CLUSTER' "OBJECT_TYPE",3 "OBJECT_TYPE_ID",5 "SEGMENT_TYPE_ID",
"A207"."OBJ#" "OBJECT_ID",
"A207"."FILE#" "HEADER_FILE",
"A207"."BLOCK#" "HEADER_BLOCK",
"A207"."TS#" "TS_NUMBER" FROM "SYS"."CLU$" "A207") UNION ALL
(SELECT DECODE("A206"."TYPE#",8,'LOBINDEX','INDEX') "OBJECT_TYPE",1
"OBJECT_TYPE_ID",6 "SEGMENT_TYPE_ID",
"A206"."OBJ#" "OBJECT_ID",
"A206"."FILE#" "HEADER_FILE",
"A206"."BLOCK#" "HEADER_BLOCK",
"A206"."TS#" "TS_NUMBER" FROM "SYS"."IND$" "A206" WHERE "A206"."TYPE#"=1 OR
"A206"."TYPE#"=2 OR
"A206"."TYPE#"=3 OR
"A206"."TYPE#"=4 OR
"A206"."TYPE#"=6 OR
"A206"."TYPE#"=7 OR
"A206"."TYPE#"=8 OR
"A206"."TYPE#"=9) UNION ALL
(SELECT 'INDEX PARTITION'
"OBJECT_TYPE",20 "OBJECT_TYPE_ID",6 "SEGMENT_TYPE_ID",
"A205"."OBJ#" "OBJECT_ID",
"A205"."FILE#" "HEADER_FILE",
"A205"."BLOCK#" "HEADER_BLOCK",
157
165. "A205"."TS#" "TS_NUMBER" FROM "SYS"."INDPART$" "A205") UNION ALL
(SELECT 'LOBSEGMENT' "OBJECT_TYPE",21 "OBJECT_TYPE_ID",8 "SEGMENT_TYPE_ID",
"A204"."LOBJ#" "OBJECT_ID",
"A204"."FILE#" "HEADER_FILE",
"A204"."BLOCK#" "HEADER_BLOCK",
"A204"."TS#" "TS_NUMBER" FROM "SYS"."LOB$" "A204" WHERE
BITAND("A204"."PROPERTY",64)=0 OR
BITAND("A204"."PROPERTY",128)=128) UNION ALL
(SELECT 'TABLE SUBPARTITION' "OBJECT_TYPE",34 "OBJECT_TYPE_ID",5
"SEGMENT_TYPE_ID",
"A203"."OBJ#" "OBJECT_ID",
"A203"."FILE#" "HEADER_FILE",
"A203"."BLOCK#" "HEADER_BLOCK",
"A203"."TS#" "TS_NUMBER" FROM "SYS"."TABSUBPART$" "A203") UNION ALL
(SELECT 'INDEX SUBPARTITION' "OBJECT_TYPE",35 "OBJECT_TYPE_ID",6
"SEGMENT_TYPE_ID",
"A202"."OBJ#" "OBJECT_ID",
"A202"."FILE#" "HEADER_FILE",
"A202"."BLOCK#" "HEADER_BLOCK",
"A202"."TS#" "TS_NUMBER" FROM "SYS"."INDSUBPART$" "A202") UNION ALL
(SELECT DECODE("A201"."FRAGTYPE$",'P','LOB PARTITION','LOB SUBPARTITION')
"OBJECT_TYPE",DECODE("A201"."FRAGTYPE$",'P',40,41) "OBJECT_TYPE_ID",8
"SEGMENT_TYPE_ID",
"A201"."FRAGOBJ#" "OBJECT_ID",
"A201"."FILE#" "HEADER_FILE",
"A201"."BLOCK#" "HEADER_BLOCK",
"A201"."TS#" "TS_NUMBER" FROM "SYS"."LOBFRAG$" "A201")) "A196",
"SYS"."SEG$" "A195",
"SYS"."FILE$" "A194" WHERE "A195"."FILE#"="A196"."HEADER_FILE" AND
"A195"."BLOCK#"="A196"."HEADER_BLOCK" AND
"A195"."TS#"="A196"."TS_NUMBER" AND
"A195"."TS#"="A197"."TS#" AND
"A198"."OBJ#"="A196"."OBJECT_ID" AND
"A198"."OWNER#"="A199"."USER#"(+) AND
"A195"."TYPE#"="A196"."SEGMENT_TYPE_ID" AND
"A198"."TYPE#"="A196"."OBJECT_TYPE_ID" AND
"A195"."TS#"="A194"."TS#" AND
158
166. "A195"."FILE#"="A194"."RELFILE#") UNION ALL
(SELECT NVL("A193"."NAME",'SYS') "OWNER",
"A191"."NAME" "SEGMENT_NAME",NULL "PARTITION_NAME",
DECODE("A190"."TYPE#",1,'ROLLBACK',10,'TYPE2 UNDO') "SEGMENT_TYPE",
"A190"."TYPE#" "SEGMENT_TYPE_ID",NULL "SEGMENT_SUBTYPE",
"A192"."TS#" "TABLESPACE_ID",
"A192"."NAME" "TABLESPACE_NAME",
"A192"."BLOCKSIZE" "BLOCKSIZE",
"A189"."FILE#" "HEADER_FILE",
"A190"."BLOCK#" "HEADER_BLOCK",
"A190"."BLOCKS"*"A192"."BLOCKSIZE" "BYTES",
"A190"."BLOCKS" "BLOCKS",
"A190"."EXTENTS" "EXTENTS",
"A190"."INIEXTS"*"A192"."BLOCKSIZE" "INITIAL_EXTENT",
"A190"."EXTSIZE"*"A192"."BLOCKSIZE" "NEXT_EXTENT",
"A190"."MINEXTS" "MIN_EXTENTS",
"A190"."MAXEXTS" "MAX_EXTENTS",DECODE(BITAND("A190"."SPARE1",4194304),4194304,
"A190"."BITMAPRANGES",NULL) "MAX_SIZE",NULL "RETENTION",NULL "MINRETENTION",
"A190"."EXTPCT"
"PCT_INCREASE",DECODE(BITAND("A192"."FLAGS",32),32,TO_NUMBER(NULL),DECODE("A190"
."LISTS",0,1,
"A190"."LISTS"))
"FREELISTS",DECODE(BITAND("A192"."FLAGS",32),32,TO_NUMBER(NULL),
DECODE("A190"."GROUPS",0,1,"A190"."GROUPS")) "FREELIST_GROUPS",
"A190"."FILE#" "RELATIVE_FNO",BITAND("A190"."CACHEHINT",3)
"BUFFER_POOL_ID",BITAND("A190"."CACHEHINT",12)/4 "FLASH_CACHE",
BITAND("A190"."CACHEHINT",48)/16 "CELL_FLASH_CACHE",NVL("A190"."SPARE1",0)
"SEGMENT_FLAGS",
"A191"."US#" "SEGMENT_OBJD" FROM "SYS"."USER$" "A193","SYS"."TS$" "A192",
"SYS"."UNDO$" "A191",
"SYS"."SEG$" "A190",
"SYS"."FILE$" "A189" WHERE "A190"."FILE#"="A191"."FILE#" AND
"A190"."BLOCK#"="A191"."BLOCK#" AND
"A190"."TS#"="A191"."TS#" AND
"A190"."TS#"="A192"."TS#" AND
"A190"."USER#"="A193"."USER#"(+) AND
("A190"."TYPE#"=1 OR
"A190"."TYPE#"=10) AND
"A191"."STATUS$"<>1 AND
159
167. "A191"."TS#"="A189"."TS#" AND
"A191"."FILE#"="A189"."RELFILE#") UNION ALL
(SELECT NVL("A188"."NAME",'SYS') "OWNER",
TO_CHAR("A185"."FILE#")||'.'||TO_CHAR("A186"."BLOCK#") "SEGMENT_NAME",NULL
"PARTITION_NAME",
DECODE("A186"."TYPE#",2,'DEFERRED ROLLBACK',3,
'TEMPORARY',4,'CACHE',9,'SPACE HEADER','UNDEFINED') "SEGMENT_TYPE",
"A186"."TYPE#" "SEGMENT_TYPE_ID",NULL "SEGMENT_SUBTYPE",
"A187"."TS#" "TABLESPACE_ID",
"A187"."NAME" "TABLESPACE_NAME",
"A187"."BLOCKSIZE" "BLOCKSIZE",
"A185"."FILE#" "HEADER_FILE",
"A186"."BLOCK#" "HEADER_BLOCK",
"A186"."BLOCKS"*"A187"."BLOCKSIZE" "BYTES",
"A186"."BLOCKS" "BLOCKS",
"A186"."EXTENTS" "EXTENTS",
"A186"."INIEXTS"*"A187"."BLOCKSIZE" "INITIAL_EXTENT",
"A186"."EXTSIZE"*"A187"."BLOCKSIZE" "NEXT_EXTENT",
"A186"."MINEXTS" "MIN_EXTENTS",
"A186"."MAXEXTS" "MAX_EXTENTS",DECODE(BITAND("A186"."SPARE1",4194304),4194304,
"A186"."BITMAPRANGES",NULL) "MAX_SIZE",NULL
"RETENTION",NULL
"MINRETENTION",DECODE(BITAND("A187"."FLAGS",3),1,TO_NUMBER(NULL),
"A186"."EXTPCT")
"PCT_INCREASE",DECODE(BITAND("A187"."FLAGS",32),32,TO_NUMBER(NULL),DECODE("A186"
."LISTS",0,1,
"A186"."LISTS"))
"FREELISTS",DECODE(BITAND("A187"."FLAGS",32),32,TO_NUMBER(NULL),DECODE("A186"."G
ROUPS",0,1,
"A186"."GROUPS")) "FREELIST_GROUPS",
"A186"."FILE#" "RELATIVE_FNO",BITAND("A186"."CACHEHINT",3)
"BUFFER_POOL_ID",BITAND("A186"."CACHEHINT",12)/4
"FLASH_CACHE",BITAND("A186"."CACHEHINT",48)/16
"CELL_FLASH_CACHE",NVL("A186"."SPARE1",0) "SEGMENT_FLAGS",
"A186"."HWMINCR" "SEGMENT_OBJD" FROM "SYS"."USER$"
"A188",
"SYS"."TS$" "A187",
"SYS"."SEG$" "A186",
"SYS"."FILE$" "A185" WHERE "A186"."TS#"="A187"."TS#" AND
"A186"."USER#"="A188"."USER#"(+) AND
"A186"."TYPE#"<>1 AND
"A186"."TYPE#"<>5 AND
160
168. "A186"."TYPE#"<>6 AND
"A186"."TYPE#"<>8 AND
"A186"."TYPE#"<>10 AND
"A186"."TYPE#"<>11 AND
"A186"."TS#"="A185"."TS#"
AND
"A186"."FILE#"="A185"."RELFILE#") UNION ALL
(SELECT NVL("A184"."NAME",'SYS') "OWNER",'HEATMAP' "SEGMENT_NAME",
NULL "PARTITION_NAME",'SYSTEM STATISTICS' "SEGMENT_TYPE",
"A182"."TYPE#" "SEGMENT_TYPE_ID",NULL "SEGMENT_SUBTYPE",
"A183"."TS#" "TABLESPACE_ID",
"A183"."NAME" "TABLESPACE_NAME",
"A183"."BLO
CKSIZE" "BLOCKSIZE",
"A181"."FILE#" "HEADER_FILE",
"A182"."BLOCK#" "HEADER_BLOCK",
"A182"."BLOCKS"*"A183"."BLOCKSIZE" "BYTES",
"A182"."BLOCKS" "BLOCKS",
"A182"."EXTENTS" "EXTENTS",
"A182"."INIEXTS"*"A183"."BLOCKSIZE" "INITIAL_EXTENT",
"A182"."EXTSIZE"*"A183"."BLOCKSIZE" "NEXT_EXTENT",
"A182"."MINEXTS" "MIN_EXTENTS",
"A182"."MAXEXTS" "MAX_EXTENTS",DECODE(BITAND("A182"."SPARE1",4194304),4194304,
"A182"."BITMAPRANGES",NULL) "MAX_SIZE",NULL "RETENTION",NULL
"MINRETENTION",DECODE(BITAND("A183"."FLAGS",3),1,TO_NUMBER(NULL),
"A182"."EXTPCT")
"PCT_INCREASE",DECODE(BITAND("A183"."FLAGS",32),32,TO_NUMBER(NULL),DEC
ODE("A182"."LISTS",0,1,
"A182"."LISTS"))
"FREELISTS",DECODE(BITAND("A183"."FLAGS",32),32,TO_NUMBER(NULL),DECODE("A182"."G
ROUPS",0,1,
"A182"."GROUPS")) "FREELIST_GROUPS",
"A182"."FILE#" "RELATIVE_FNO",BITAND("A182"."CACHEHINT",3) "BUFFER_POOL_ID",
BITAND("A182"."CACHEHINT",12)/4 "FLASH_CACHE",BITAND("A18
2"."CACHEHINT",48)/16 "CELL_FLASH_CACHE",NVL("A182"."SPARE1",0) "SEGMENT_FLAGS",
"A182"."HWMINCR" "SEGMENT_OBJD" FROM "SYS"."USER$" "A184",
161
169. "SYS"."TS$" "A183",
"SYS"."SEG$" "A182",
"SYS"."FILE$" "A181" WHERE "A182"."TS#"="A183"."TS#" AND
"A182"."USER#"="A184"."USER#"(+) AND
"A182"."TYPE#"=11 AND
"A182"."TS#"="A181"."TS#" AND
"A182"."FILE#"="A181"."RELFILE#")) "A4") "A3", (SELECT "A5"."NAME" "OWNER",
"A6"."NAME" "OBJECT_NAME",
"A6"."SUBNAME" "SUBOBJECT_NAME",
"A6"."OBJ#" "OBJECT_ID",
"A6"."DATAOBJ#" "DATA_OBJECT_ID",DECODE("A6"."TYPE#",0,'NEXT OBJECT',1,'INDEX',
2,'TABLE',3,'CLUSTER',4,'VIEW',5,'SYNONYM
',6,'SEQUENCE',7,'PROCEDURE',8,'FUNCTION',9,'PACKAGE',11,'PACKAGE BODY',12,
'TRIGGER',13,'TYPE',14,'TYPE BODY',19,'TABLE PARTITION',20,'INDEX PARTITION',
21,'LOB',22,'LIBRARY',23,'DIRECTORY',24,'QUEUE',28,'JAVA SOURCE',29,'JAVA CLASS',30,
'JAVA RESOURCE',32,'INDEXTYPE',33,'OPERATOR',34,
'TABLE SUBPARTITION',35,'INDEX SUBPARTITION',40,'LOB PARTITION',41,'LOB SUBPARTITION',42
,NVL( (SELECT 'REWRITE EQUIVALENCE' "'REWRITEEQUIVALENCE'" FROM SYS."SUM$" "A52" WHERE
"A52"."OBJ#"="A6"."OBJ#" AND
BITAND("A52"."XPFLAGS",8388608)=8388608),'MATERIALIZED VIEW'),43,'DIMENSION',
44,'CONTEXT',46,'RULE SET',47,'RESOURCE PLAN',48,'CONSUMER GROUP',55,'XML SCHEMA',56,'JAVA
DATA',57,'EDITION',59,'RULE',
60,'CAPTURE',61,'APPLY',62,'EVALUATION CONTEXT',66,'JOB',67,'PROGRAM',68,'JOB CLASS',69,
'WINDOW',72,'SCHEDULER GROUP',74,'SCHEDULE',79,'CHAIN',81,'FILE GROUP',82,'MINING
MODEL',87,'ASSEMBLY',90,'CREDENTIAL',92,'CUBE
DIMENSION',93,'CUBE',94,'MEASURE FOLDER',95,'CUBE BUILD PROCESS',100,'FILE WATCHER',
101,'DESTINATION',114,'SQL TRANSLATION PROFILE',115,'UNIFIED AUDIT POLICY','UNDEFINED')
"OBJECT_TYPE",
"A6"."CTIME" "CREATED",
"A6"."MTIME" "LAST_DDL_TIME",TO_CHAR("A6"."STIME",'YYYY-MM-DD:HH24:MI:SS') "TIMESTAMP",DEC
ODE("A6"."STATUS",0,'N/A',1,'VALID','INVALID')
"STATUS",DECODE(BITAND("A6"."FLAGS",2),0,'N',2,'Y','N')
"TEMPORARY",DECODE(BITAND("A6"."FLAGS",4),0,'N',4,'Y','N')
"GENERATED",DECODE(BITAND("A6"."FLAGS",16),0,'N',16,'Y','N') "SECONDARY",
"A6"."NAMESPACE" "NAMESPACE",
"A6"."DEFINING_EDITION" "EDITION_NAM
E",DECODE(BITAND("A6"."FLAGS",196608),65536,'METADATA LINK',131072,'OBJECT LINK','NONE')
"SHARING",
CASE WHEN ("A6"."TYPE#"=4 OR
"A6"."TYPE#"=5 OR
162
172. SQL> variable c clob
SQL> begin
2
dbms_utility.expand_sql_text(
3
q'{select * from emp_temporal
4
as of period for valid_range '01-FEB-14'}',:c);
6 end;
7 /
175. SQL> desc EMPLOYEE
Name
Null?
------------------------- -------EMPNO
ENAME
JOB
MGR
HIREDATE
SAL
COMM
DEPTNO
Type
--------------NUMBER(4)
VARCHAR2(10)
VARCHAR2(9)
NUMBER(4)
DATE
NUMBER(7,2)
NUMBER(12,2)
NUMBER(2)
SQL> alter table EMPLOYEE add period for TIME_RANGE;
Table altered.
168
176. SQL> desc EMPLOYEE
Name
Null?
------------------------- -------EMPNO
ENAME
JOB
MGR
HIREDATE
SAL
COMM
DEPTNO
Type
--------------NUMBER(4)
VARCHAR2(10)
VARCHAR2(9)
NUMBER(4)
DATE
NUMBER(7,2)
NUMBER(12,2)
NUMBER(2)
still looks the same ?
169
177. SQL>
2
3
4
select column_name , hidden_column
from user_tab_cols
where table_name = 'EMPLOYEE'
order by column_id;
COLUMN_NAME
-----------------------------EMPNO
ENAME
JOB
MGR
HIREDATE
SAL
COMM
DEPTNO
TIME_RANGE_START
TIME_RANGE_END
TIME_RANGE
HIDDEN_COLUMN
------------NO
NO
NO
NO
NO
NO
NO
NO
YES
YES
YES
170
179. SQL> alter table EMP_TEMPORAL add period for CAL_RANGE;
Table altered.
SQL> alter table EMP_TEMPORAL add period for FINYR_RANGE;
Table altered.
172
187. SQL>
2
3
4
update EMP_TEMPORAL
as of period for valid_range '01-FEB-14'
set sal = 10
where empno = 20;
as of period for valid_range '01-FEB-14'
*
ERROR at line 2:
ORA-08187: snapshot expression not allowed here
188. SQL> update
2
( select * from EMP_TEMPORAL
3
as of period for valid_range '01-FEB-14'
4
)
5 set sal = 10
6 where empno = 20;
1 row updated.
181
201. SQL> exec P;
----- PL/SQL Call Stack ----object
line object
handle
number name
0x14b1e3900
21 procedure SCOTT.P
0x12521b8d8
1 anonymous block
BEGIN P; END;
*
ERROR at line 1:
ORA-01476: divisor is equal to zero
ORA-06512: at "SCOTT.P", line 23
ORA-06512: at line 1
194
202. SQL>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
create or replace procedure P is
x int;
y int;
l_debug varchar2(4000);
begin
l_debug := dbms_utility.format_call_stack;
x := 10;
l_debug := dbms_utility.format_call_stack;
select count(*)
into
y
from
all_objects
where object_name = 'NUFFIN';
l_debug := dbms_utility.format_call_stack;
x := x / y;
l_debug := dbms_utility.format_call_stack;
select rownum
into
x
from
dual;
exception
when others then
dbms_output.put_line(l_debug);
raise;
end;
203. SQL> exec P;
----- PL/SQL Call Stack ----object
line object
handle
number name
0x14b1e3900
16 procedure SCOTT.P
0x12521b8d8
1 anonymous block
BEGIN P; END;
*
ERROR at line 1:
ORA-01476: divisor is equal to zero
ORA-06512: at "SCOTT.P", line 27
ORA-06512: at line 1
196
204. SQL> create or replace procedure P is
2
x int;
3
y int;
4
l_debug varchar2(4000);
5 begin
6
l_debug := dbms_utility.format_call_stack;
7
...
24
25
26
27
28
29
30
31
exception
when others then
l_debug := substr(l_debug,instr(l_debug,chr(10),1,3));
l_debug := regexp_replace(l_debug,chr(10)||'.*$');
dbms_output.put_line(l_debug);
raise;
end;
/
205. SQL> exec P;
0x14b1e3900
BEGIN P; END;
16
procedure SCOTT.P
*
ERROR at line 1:
ORA-01476: divisor is equal to zero
ORA-06512: at "SCOTT.P", line 29
ORA-06512: at line 1
198
208. SQL> create or replace procedure P is
2
x int;
3
y int;
4
l_debug varchar2(4000);
5 begin
6
l_debug := dbms_utility.format_call_stack;
7
8
x := 10;
9
...
23
24 exception
25
when others then
26
dbms_output.put_line(
27
DBMS_UTILITY.FORMAT_ERROR_BACKTRACE );
28
raise;
29 end;
209. SQL> exec P;
ORA-06512: at "SCOTT.P", line 17
BEGIN P; END;
*
ERROR at line 1:
ORA-01476: divisor is equal to zero
ORA-06512: at "SCOTT.P", line 27
ORA-06512: at line 1
202
213. SQL> create or replace procedure P is
2
x int;
3
y int;
4 begin
5
x := 10;
6
...
17
18 exception
19
when others then
20
for i in 1 .. utl_call_stack.dynamic_depth loop
21
dbms_output.put_line(
22
utl_call_stack.unit_line(i)||'-'||
23
utl_call_stack.concatenate_subprogram(
24
utl_call_stack.subprogram(i))
25
);
26
end loop;
27
raise;
28 end;
206
217. SQL> create or replace package body PKG is
2
3 procedure p is
...
19
20 exception
21
when others then
22
for i in 1 .. utl_call_stack.dynamic_depth loop
23
dbms_output.put_line(
24
utl_call_stack.unit_line(i)||'-'||
25
utl_call_stack.concatenate_subprogram(
26
utl_call_stack.subprogram(i))
27
);
28
end loop;
29
raise;
30 end;
31
32 procedure p1 is begin p; end;
33 procedure p2 is begin p1; end;
34 procedure p3 is begin p2; end;
35
36 end;
37 /
210
232. SQL>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
create or replace
function my_initcap(p_string varchar2) return varchar2 is
l_string varchar2(1000) := p_string;
begin
if regexp_like(l_string,'(Mac[A-Z]|Mc[A-Z])') then
null;
elsif l_string like '''%' then
null;
else
l_string := initcap(l_string);
if l_string like '_''S%' then
null;
else
l_string := replace(l_string,'''S','''s');
end if;
end if;
return l_string;
end;
/
Function created.
241. SQL> select
2
case
3
when regexp_like(surname,'(Mac[A-Z]|Mc[A-Z])') then surname
4
when surname like '''%' then surname
5
when initcap(surname) like '_''S%' then surname
6
else replace(initcap(surname),'''S','''s')
7
end ugh
8 from names;
UGH !!!
------------------------------Jones
Brown
Smith
McDonald
Johnson's
242. "Always code as if the person who
ends up maintaining your code is a
psychopathic killer who knows
where you live."
- source unknown
234
244. SQL> WITH
2
function my_initcap(p_string varchar2) return varchar2 is
3
l_string varchar2(1000) := p_string;
4
begin
5
if regexp_like(l_string,'(Mac[A-Z]|Mc[A-Z])') then
6
null;
7
elsif l_string like '''%' then
...
17
18
return l_string;
19
end;
20 select my_initcap(surname)
21 from
names;
MY_INITCAP(SURNAME)
----------------------------------------Jones
Brown
Smith
McDonald
O'Brien
Johnson's
236
249. SQL> WITH
2
function my_initcap(p_string varchar2) return varchar2 is
3
l_string varchar2(1000) := p_string;
function my_initcap(p_string varchar2) return varchar2 is
*
ERROR at line 2:
ORA-06553: PLS-103: Encountered the symbol "end-of-file" when
expecting one of the following:
. ( * @ % & = - + ; < / > at in is mod remainder not rem
<an exponent (**)> <> or != or ~= >= <= <> and or like like2
like4 likec between || multiset member submultiset
SQL>
2
3
4
5
6
7
begin
if regexp_like(l_string,'(Mac[A-Z]|Mc[A-Z])') then
null;
elsif l_string like '''%' then
null;
else
l_string := initcap(l_string);
241
256. SQL> insert into NAMES2
2 WITH
3
function my_initcap(p_string varchar2)
4
return varchar2 is
5
l_string varchar2(1000) := p_string;
6
begin
...
20
end;
21 select my_initcap(surname)
22 from
names;
23 /
WITH
*
ERROR at line 2:
ORA-32034: unsupported use of WITH clause
248
257. SQL> insert /*+ WITH_PLSQL */ into NAMES2
2 WITH
3
function my_initcap(p_string varchar2)
4
return varchar2 is
5
l_string varchar2(1000) := p_string;
6
begin
...
20
end;
21 select my_initcap(surname)
22 from
names;
23 /
5 rows inserted.
259. SQL>
2
3
4
5
6
7
8
9
with
function f return timestamp as
begin
return systimestamp;
end;
select f
from dual
connect by level <= 10;
/
F
---------------------------------------05-JAN-14 08.09.43.969000000 PM
05-JAN-14 08.09.43.970000000 PM
05-JAN-14 08.09.43.970000000 PM
05-JAN-14 08.09.43.971000000 PM
...
261. SQL>
2
3
4
5
6
7
8
9
with
function f return timestamp DETERMINISTIC as
begin
return systimestamp;
end;
select f
from dual
connect by level <= 10;
/
F
---------------------------------------05-JAN-14 08.09.52.145000000 PM
05-JAN-14 08.09.52.146000000 PM
05-JAN-14 08.09.52.146000000 PM
05-JAN-14 08.09.52.147000000 PM
...
263. SQL>
2
3
4
5
6
7
8
9
with
function f return timestamp as
begin
return systimestamp;
end;
select ( select f from dual )
from dual
connect by level <= 10;
/
F
---------------------------------------05-JAN-14 08.11.50.145000000 PM
05-JAN-14 08.11.50.145000000 PM
05-JAN-14 08.11.50.145000000 PM
05-JAN-14 08.11.50.145000000 PM
...
266. SQL>
2
3
4
5
6
7
select sum(f)
from
( select level from dual
connect by level <= 1000 ),
( select level from dual
connect by level <= 1000 )
;
SUM(F)
---------1000000
Elapsed: 00:00:02.04
258
267. SQL>
2
3
4
5
6
7
8
9
10
11
12
with
function f1 return number is
begin
return 1;
end;
select sum(f1)
from
( select level from dual
connect by level <= 1000 ),
( select level from dual
connect by level <= 1000 )
/
SUM(F1)
---------1000000
Elapsed: 00:00:00.52
284. SQL>
2
3
4
select empno, ename, hiredate
from emp
order by hiredate desc
fetch first 1 row only;
EMPNO ENAME
HIREDATE
---------- ---------- --------7876 ADAMS
23-MAY-87
275
285. SQL>
2
3
4
select empno, ename, hiredate
from emp
order by hiredate desc
fetch first 5 row only;
EMPNO
---------7876
7788
7934
7900
7902
ENAME
---------ADAMS
SCOTT
MILLER
JAMES
FORD
HIREDATE
--------23-MAY-87
19-APR-87
23-JAN-82
03-DEC-81
03-DEC-81
276
286. SQL>
2
3
4
select empno, ename, hiredate
from emp
order by hiredate desc
fetch first 10 percent rows only;
EMPNO
---------7876
7788
ENAME
---------ADAMS
SCOTT
HIREDATE
--------23-MAY-87
19-APR-87
277
293. SQL>
2
3
4
select empno, ename, hiredate
from emp
order by hiredate desc
fetch LAST 5 rows only;
fetch LAST 5 rows only
*
ERROR at line 4:
ORA-00905: missing keyword
284
294. SQL>
2
3
4
5
6
7
8
select *
from (
select empno, ename, hiredate
from emp
order by hiredate asc
fetch first 5 rows only
)
order by hiredate desc;
EMPNO
---------7698
7566
7521
7499
7369
ENAME
---------BLAKE
JONES
WARD
ALLEN
SMITH
HIREDATE
--------01-MAY-81
02-APR-81
22-FEB-81
20-FEB-81
17-DEC-80
285
304. SQL> variable x number
SQL> exec :x := 5
PL/SQL procedure successfully completed.
SQL>
2
3
4
select empno, ename, hiredate
from emp
order by hiredate desc
fetch first :x rows only;
EMPNO
---------7876
7788
7934
7900
7902
ENAME
---------ADAMS
SCOTT
MILLER
JAMES
FORD
HIREDATE
--------23-MAY-87
19-APR-87
23-JAN-82
03-DEC-81
03-DEC-81
295
305. SQL> declare
2
l_num number := 5;
3 begin
4
for i in (
5
select empno, ename, hiredate
6
from emp
7
order by hiredate desc
8
fetch first l_num rows only
9 )
10 loop
11
null;
12 end loop;
13 end;
14 /
declare
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 26618
Session ID: 25 Serial number: 53023
296
306. SQL>
2
3
4
5
6
7
8
9
10
11
12
13
14
declare
l_num number := 5;
begin
for i in (
select empno, ename, hiredate
from emp
order by hiredate desc
fetch first cast(l_num as number) rows only
)
loop
null;
end loop;
end;
/
PL/SQL procedure successfully completed.
297
309. SQL> create table emp2 as
2 select * from emp;
Table created.
SQL> select *
2 from emp e,
3
emp2 e2,
4
dept d
5 where e.deptno = d.deptno(+)
6 and
e2.deptno = d.deptno(+)
7 and
e.empno = e2.empno
8 /
where e.deptno = d.deptno(+)
*
ERROR at line 5:
ORA-01417: a table may be outer joined to at most
one other table
300
317. SQL> select e.empno, d.deptno, b.benefits
2 from
emp e,
3
( select benefits
4
from
DEPT_BENEFITS d
5
where d.deptno = e.deptno
6
) b
7 order by 1,3;
where d.deptno = e.deptno
*
ERROR at line 5:
ORA-00904: "E"."DEPTNO": invalid identifier
308
321. SQL> select e.empno,
2 from
emp e,
3
( select
4
from
5
where
6
) b
7
8 order by 1,3;
d.deptno, b.benefits
benefits
DEPT_BENEFITS d
d.deptno = e.deptno
312
344. SQL> create table T
2
( x int,
3
y int);
Table created.
SQL> create index IX on T (x+0);
Index created.
SQL> alter table T set unused column Y;
Table altered.
334
347. SQL> create table T ( c1 int, c2 int, c3 int );
SQL> desc T
Name
Null?
---------------------------- -------C1
C2
C3
Type
------NUMBER(38)
NUMBER(38)
NUMBER(38)
SQL> alter table T modify c1 invisible;
SQL> desc T
Name
Null?
---------------------------- -------C2
C3
Type
------NUMBER(38)
NUMBER(38)
337
349. SQL> alter table T modify c1 visible;
SQL> desc T
Name
Null?
---------------------------- -------C2
C3
C1
Type
------NUMBER(38)
NUMBER(38)
NUMBER(38)
339
351. SQL>
2
3
4
5
6
7
create or replace
procedure P is
begin
insert into T (c1,c2,c3)
values (1,10,100);
end;
/
Procedure created.
SQL> exec P
PL/SQL procedure successfully completed.
SQL> alter table T modify c1 invisible;
Table altered.
SQL> alter table T modify c1 visible;
Table altered.
341
352. SQL> exec P
PL/SQL procedure successfully completed.
SQL> select * from T;
C2
C3
C1
---------- ---------- ---------10
100
1
1
10
100
SQL> desc T
Name
Null?
------------------- -------C2
C3
C1
Type
-------------------NUMBER(38)
NUMBER(38)
NUMBER(38)
342
353. SQL>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
create or replace
procedure FIX_COLS(p_tab varchar2, p_col_list varchar2) is
l_col_list varchar2(1000) := p_col_list||',';
type clist is table of varchar2(30)
index by pls_integer;
c clist;
l_col varchar2(30);
l_id int;
begin
while instr(l_col_list,',') > 1 loop
c(c.count+1) := substr(l_col_list,1,instr(l_col_list,',')-1);
l_col_list
:= substr(l_col_list,instr(l_col_list,',')+1);
dbms_output.put_line(c(c.count));
end loop;
for i in 1 .. c.count loop
loop
select column_name
into
l_col
from
user_tab_columns
where table_name = p_tab
and
column_id = i;
exit when l_col = c(i);
execute immediate 'alter table '||p_tab||' modify '||l_col||' invisible';
execute immediate 'alter table '||p_tab||' modify '||l_col||' visible';
end loop;
end loop;
end;
/
343
354. SQL> exec FIX_COLS('T','C1,C2,C3');
PL/SQL procedure successfully completed.
SQL> desc T
Name
Null?
---------------------------- -------C1
C2
C3
Type
------NUMBER(38)
NUMBER(38)
NUMBER(38)
344
359. SQL> alter table T add c3 int;
Table altered.
SQL>
2
3
4
5
6
7
8
9
10
11
create or replace
procedure APP2 is
begin
for i in ( select c1,c2,c3 from T )
loop
dbms_output.put_line(i.c1);
dbms_output.put_line(i.c2);
dbms_output.put_line(i.c3);
end loop;
end;
/
Procedure created.
349
366. SQL> create table T ( c1 int, c2 int invisible);
Table created.
SQL> desc T
Name
Null?
Type
------------------------- -------- -----------------C1
NUMBER(38)
SQL> set colinvisible ON
SQL> desc T
Name
Null?
------------------------- -------C1
C2 (INVISIBLE)
Type
----------NUMBER(38)
NUMBER(38)
356