New Name !
The first is a new name this EA it's named sqlcl for sql command line. However, the binary to start it up is simply sql. Nothing is easier when you need to run some sql than typing 'sql' and hitting enter.
#./sql klrice/klrice@//localhost/orcl
SQLcl: Release 4.1.0 Beta on Fri Jan 30 12:53:05 2015
Copyright (c) 1982, 2015, Oracle. All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
There's never too much Information
The next is a new information command has a lot more in it now. Hit me up on twitter if you can think of more things it should show some of the things here are directly from folks doing exactly that. Sometimes functional specs can be done in 140 chars.
KLRICE@ORCL>
KLRICE@ORCL>info hr.employees
TABLE: EMPLOYEES
LAST ANALYZED:2015-01-17 12:06:26.0
ROWS :107
SAMPLE SIZE :107
INMEMORY :DISABLED
COMMENTS :employees table. Contains 107 rows. References with departments,
jobs, job_history tables. Contains a self reference.
Columns
NAME DATA TYPE NULL DEFAULT COMMENTS
*EMPLOYEE_ID NUMBER(6,0) No Primary key of employees table.
FIRST_NAME VARCHAR2(20 BYTE) Yes First name of the employee. A not null column.
LAST_NAME VARCHAR2(25 BYTE) No Last name of the employee. A not null column.
EMAIL VARCHAR2(25 BYTE) No Email id of the employee
PHONE_NUMBER VARCHAR2(20 BYTE) Yes Phone number of the employee; includes country code and area code
HIRE_DATE DATE No Date when the employee started on this job. A not null column.
JOB_ID VARCHAR2(10 BYTE) No Current job of the employee; foreign key to job_id column of the
jobs table. A not null column.
SALARY NUMBER(8,2) Yes Monthly salary of the employee. Must be greater
than zero (enforced by constraint emp_salary_min)
COMMISSION_PCT NUMBER(2,2) Yes Commission percentage of the employee; Only employees in sales
department elgible for commission percentage
MANAGER_ID NUMBER(6,0) Yes Manager id of the employee; has same domain as manager_id in
departments table. Foreign key to employee_id column of employees table.
(useful for reflexive joins and CONNECT BY query)
DEPARTMENT_ID NUMBER(4,0) Yes Department id where employee works; foreign key to department_id
column of the departments table
Indexes
INDEX_NAME UNIQUENESS STATUS FUNCIDX_STATUS COLUMNS COLUMN_EXPRESSION
HR.EMP_JOB_IX NONUNIQUE VALID JOB_ID
HR.EMP_NAME_IX NONUNIQUE VALID LAST_NAME, FIRST_NAME
HR.EMP_EMAIL_UK UNIQUE VALID EMAIL
HR.EMP_EMP_ID_PK UNIQUE VALID EMPLOYEE_ID
HR.EMP_MANAGER_IX NONUNIQUE VALID MANAGER_ID
HR.EMP_DEPARTMENT_IX NONUNIQUE VALID DEPARTMENT_ID
References
TABLE_NAME CONSTRAINT_NAME DELETE_RULE STATUS DEFERRABLE VALIDATED GENERATED
DEPARTMENTS DEPT_MGR_FK NO ACTION ENABLED NOT DEFERRABLE VALIDATED USER NAME
EMPLOYEES EMP_MANAGER_FK NO ACTION ENABLED NOT DEFERRABLE VALIDATED USER NAME
JOB_HISTORY JHIST_EMP_FK NO ACTION ENABLED NOT DEFERRABLE VALIDATED USER NAME
KLRICE@ORCL>
Info doesn't end there, you can do info+ and get different data and I'm in the process of changing the indexes to show some stats also like the main table.
KLRICE@ORCL>info+ hr.employees
TABLE: EMPLOYEES
LAST ANALYZED:2015-01-17 12:06:26.0
ROWS :107
SAMPLE SIZE :107
INMEMORY :DISABLED
COMMENTS :employees table. Contains 107 rows. References with departments,
jobs, job_history tables. Contains a self reference.
Columns
NAME DATA TYPE NULL DEFAULT LOW_VALUE HIGH_VALUE NUM_DISTINCT HISTOGRAM
*EMPLOYEE_ID NUMBER(6,0) No 100 206 107 NONE
FIRST_NAME VARCHAR2(20 BYTE) Yes Adam Winston 91 NONE
LAST_NAME VARCHAR2(25 BYTE) No Abel Zlotkey 102 NONE
EMAIL VARCHAR2(25 BYTE) No ABANDA WTAYLOR 107 NONE
PHONE_NUMBER VARCHAR2(20 BYTE) Yes 011.44.1343.329268 650.509.4876 107 NONE
HIRE_DATE DATE No 1987.06.17.00.00.00 2000.04.21.00.00.00 98 NONE
JOB_ID VARCHAR2(10 BYTE) No AC_ACCOUNT ST_MAN 19 NONE
SALARY NUMBER(8,2) Yes 2100 24000 57 NONE
COMMISSION_PCT NUMBER(2,2) Yes .1 .4 7 NONE
MANAGER_ID NUMBER(6,0) Yes 100 205 18 NONE
DEPARTMENT_ID NUMBER(4,0) Yes 10 110 11 NONE
Indexes
INDEX_NAME UNIQUENESS STATUS FUNCIDX_STATUS COLUMNS COLUMN_EXPRESSION
HR.EMP_JOB_IX NONUNIQUE VALID JOB_ID
HR.EMP_NAME_IX NONUNIQUE VALID LAST_NAME, FIRST_NAME
HR.EMP_EMAIL_UK UNIQUE VALID EMAIL
HR.EMP_EMP_ID_PK UNIQUE VALID EMPLOYEE_ID
HR.EMP_MANAGER_IX NONUNIQUE VALID MANAGER_ID
HR.EMP_DEPARTMENT_IX NONUNIQUE VALID DEPARTMENT_ID
References
TABLE_NAME CONSTRAINT_NAME DELETE_RULE STATUS DEFERRABLE VALIDATED GENERATED
DEPARTMENTS DEPT_MGR_FK NO ACTION ENABLED NOT DEFERRABLE VALIDATED USER NAME
EMPLOYEES EMP_MANAGER_FK NO ACTION ENABLED NOT DEFERRABLE VALIDATED USER NAME
JOB_HISTORY JHIST_EMP_FK NO ACTION ENABLED NOT DEFERRABLE VALIDATED USER NAME
KLRICE@ORCL>
Those who don't know history are doomed to repeat.
The last thing to be sure to take a look at is the history. History by itself is great however we wanted to show how often the history is uses so there's now "history usage" which will show how many times that history item has been run. The other thing new here is that instead of timing statements only when user request it, we now time and record that time for everything. You can access is very simply with "history time" that will show the timings of how long the things in the history took. The format of the time is HH:MI:SS.fff and we shorten the leading numbers when zero to be able to read and format it easier.
KLRICE@ORCL>history time
....
20 info s
21 (00.050) select table_name from user_tables
22 info+ s
23 info hr.dept
24 into scott.emp
25 info scott.emp
26 info+ scott.emp
27 info all_tables
28 info all_tab_comments
29 (04.531) select * from all_tables t,all_tab_comments tc where t.owner = tc.owner and t.table_name = tc.table_name
30 (00.420) select * from all_tables t,all_tab_comments tc where t.owner = tc.owner (+) and t.table_name = tc.table_name(+)
While this is 3 really quick things, there's a lot more in there with this new EA. We will blog the other new things more in the coming days.