├── 01_How _to_install_sqlplus_using_instant_client_on_mac └── readme.MD ├── 02_How_to_install_instant_client_on_Windows └── readme.MD ├── 03_How_to_download_and_install_oracle_11g_on_Windows └── readme.MD ├── 04_Providing_a_role_in_oracle_database ├── providing-role.sql └── readme.MD ├── 05_Creating_temporary_and_permanent_tablespace ├── readme.MD └── tablespace.sql ├── 06_Creating_user_role_and_a_tablespace ├── create-user-provide-tablespace-resource.sql └── readme.MD ├── 07_Creating_table_and_sequence ├── readme.MD └── table-sequence.sql ├── 08_Writing_to_table_with_package_and_procedure ├── customer-handler.pkb ├── customer-handler.pks └── readme.MD ├── 09_Cursor_Loop_and_Condition ├── DDL.sql ├── cusor-loop-condition.sql └── readme.MD ├── 10_Procedure ├── Invoking-procedure.sql ├── Procedure.sql └── readme.MD ├── 11_procedure_and_package ├── package-body.sql ├── package-header.sql ├── query.sql └── readme.MD ├── 12_RESTful_API_call_using_UTL_HTTP ├── readme.MD └── rest-request-plsql.sql ├── 13_Generic_way_to_get_data_from_table_using_Colum_name ├── package-body.sql ├── package-header.sql ├── query.sql ├── readme.MD └── table-script.sql ├── 14_Connection_to_database_using_sqlplus_using_service_name ├── README.MD └── connection.sql ├── 15_How_to_make_deployment_script_in_oracle ├── insert-package.sql ├── insert1.sql ├── master-deployment.sql └── readme.MD ├── 16_Function_using_PL_SQL ├── function-call-plsql.sql ├── function-pl-sql.sql └── readme.MD ├── 17_Schedular_Job_to_call_procedure ├── readme.MD └── schedular-job.sql ├── 18_Database_link ├── DB-link.sql └── readme.MD ├── 19_How_to_use_Trigger_in_PLSQL ├── README.MD ├── Trigger-hit-table.sql ├── Trigger.sql └── Trigger_demo.sql ├── 20_Package_and_procedure_in_PL-SQL_v2 ├── Calling-procedure-from-package.sql ├── Oracle-package-body.sql ├── Oracle-package-header.sql └── readme.MD ├── 21_What_to_do_if_username_and_password_is_lost_in_oracle └── readme.MD └── README.md /01_How _to_install_sqlplus_using_instant_client_on_mac/readme.MD: -------------------------------------------------------------------------------- 1 | # How to install instantclient on mac to connect to Oracle Server ? # 2 | 1. goto : https://www.oracle.com/database/technologies/instant-client/downloads.html 3 | 2. download instant client and unzip it using 4 | unzip "file_name" 5 | 3. ls 6 | 4. ls -a 7 | 5. open .bash_profile 8 | 6. export PATH=/Users/rbhatta/downloads/instantclient_12_1:$PATH 9 | -------------------------------------------------------------------------------- /02_How_to_install_instant_client_on_Windows/readme.MD: -------------------------------------------------------------------------------- 1 | # How to install instant client on windows to connect to Oracle server ? # 2 | 1. Goto google and search instant client for 64-bits (in my case) or goto https://www.oracle.com/ca-en/database/technologies/instant-client/winx64-64-downloads.html 3 | 2. Unzip and put it inside folder C:\instantclient_19_3 4 | 3. Goto System variables: My PC-> Properties-> Advanced Setting ->Environment Variables ->System Variables 5 | 4. Create new system variables : name= TNS_ADMIN and path=C:\instantclient_19_3 6 | 5. Edit path variable and add %TNS_ADMIN% -------------------------------------------------------------------------------- /03_How_to_download_and_install_oracle_11g_on_Windows/readme.MD: -------------------------------------------------------------------------------- 1 | # How to download and install oracle 11g on Windows ? # 2 | 1. Goto https://www.oracle.com/database/technologies/112010-win64soft.html or search on google (download oracle 11g database) 3 | 2. Znip both file into single folder 4 | 3. Select desktop class during installation -------------------------------------------------------------------------------- /04_Providing_a_role_in_oracle_database/providing-role.sql: -------------------------------------------------------------------------------- 1 | -- ============== Grant of roles in oracle database to user ==================== 2 | GRANT resource, DBA to oracletest; 3 | -------------------------------------------------------------------------------- /04_Providing_a_role_in_oracle_database/readme.MD: -------------------------------------------------------------------------------- 1 | # Providing a role in Oracle 11g database # 2 | 3 | ```sql 4 | 5 | GRANT resource, DBA to oracletest; 6 | 7 | ``` 8 | 9 | - note oracle test is the username -------------------------------------------------------------------------------- /05_Creating_temporary_and_permanent_tablespace/readme.MD: -------------------------------------------------------------------------------- 1 | # Creating temporary and permanent tablespace in oracle # 2 | ```sql 3 | -- =============CREATING A PERMANENT TABLESPACE FOR USER=========================== 4 | CREATE TABLESPACE RAJ_TABSPACE 5 | DATAFILE 'D:\oracle\oradata\orcl\RAJ_TABSPACE.DAT' 6 | SIZE 10M AUTOEXTEND ON; 7 | 8 | -- ======================CREATING A TEMPORAY TABLESPACE FOR USER==================== 9 | CREATE TEMPORARY TABLESPACE RAJ_TABSPACE_TEMP 10 | TEMPFILE 'D:\oracle\oradata\orcl\RAJ_TABSPACE_TEMP.DAT' 11 | SIZE 5M AUTOEXTEND ON; 12 | ``` -------------------------------------------------------------------------------- /05_Creating_temporary_and_permanent_tablespace/tablespace.sql: -------------------------------------------------------------------------------- 1 | -- =============CREATING A PERMANENT TABLESPACE FOR USER=========================== 2 | CREATE TABLESPACE RAJ_TABSPACE 3 | DATAFILE 'D:\oracle\oradata\orcl\RAJ_TABSPACE.DAT' 4 | SIZE 10M AUTOEXTEND ON; 5 | 6 | -- ======================CREATING A TEMPORAY TABLESPACE FOR USER==================== 7 | CREATE TEMPORARY TABLESPACE RAJ_TABSPACE_TEMP 8 | TEMPFILE 'D:\oracle\oradata\orcl\RAJ_TABSPACE_TEMP.DAT' 9 | SIZE 5M AUTOEXTEND ON; 10 | -------------------------------------------------------------------------------- /06_Creating_user_role_and_a_tablespace/create-user-provide-tablespace-resource.sql: -------------------------------------------------------------------------------- 1 | create user toad_user identified by toad_user 2 | default tablespace RAJ_TABSPACE 3 | quota unlimited on RAJ_TABSPACE; 4 | 5 | 6 | grant resource, dba to toad_user; 7 | -------------------------------------------------------------------------------- /06_Creating_user_role_and_a_tablespace/readme.MD: -------------------------------------------------------------------------------- 1 | # Creating a role and tablespace in 11g # 2 | ```sql 3 | create user toad_user identified by toad_user 4 | default tablespace RAJ_TABSPACE 5 | quota unlimited on RAJ_TABSPACE; 6 | 7 | 8 | grant resource, dba to toad_user; 9 | 10 | ``` -------------------------------------------------------------------------------- /07_Creating_table_and_sequence/readme.MD: -------------------------------------------------------------------------------- 1 | # Creating table and sequence in Oracle 11g # 2 | ```sql 3 | -- =====Creating a table 4 | DROP TABLE TOAD_USER.CUSTOMERS CASCADE CONSTRAINTS; 5 | CREATE TABLE TOAD_USER.CUSTOMERS 6 | ( 7 | ID NUMBER NOT NULL, 8 | NAME VARCHAR2(200 BYTE) NOT NULL, 9 | DESCRIPTION VARCHAR2(1000 BYTE), 10 | USERNAME VARCHAR2(200 BYTE) 11 | ) 12 | 13 | --- ======Creating a sequence 14 | DROP SEQUENCE TOAD_USER.CUSTOMER_SEQ; 15 | CREATE SEQUENCE TOAD_USER.CUSTOMER_SEQ 16 | START WITH 1 17 | MAXVALUE 999999999999999999999999999 18 | MINVALUE 1 19 | NOCYCLE 20 | CACHE 20 21 | NOORDER; 22 | 23 | ``` -------------------------------------------------------------------------------- /07_Creating_table_and_sequence/table-sequence.sql: -------------------------------------------------------------------------------- 1 | -- =====Creating a table 2 | DROP TABLE TOAD_USER.CUSTOMERS CASCADE CONSTRAINTS; 3 | CREATE TABLE TOAD_USER.CUSTOMERS 4 | ( 5 | ID NUMBER NOT NULL, 6 | NAME VARCHAR2(200 BYTE) NOT NULL, 7 | DESCRIPTION VARCHAR2(1000 BYTE), 8 | USERNAME VARCHAR2(200 BYTE) 9 | ) 10 | 11 | --- ======Creating a sequence 12 | DROP SEQUENCE TOAD_USER.CUSTOMER_SEQ; 13 | CREATE SEQUENCE TOAD_USER.CUSTOMER_SEQ 14 | START WITH 1 15 | MAXVALUE 999999999999999999999999999 16 | MINVALUE 1 17 | NOCYCLE 18 | CACHE 20 19 | NOORDER; 20 | 21 | -------------------------------------------------------------------------------- /08_Writing_to_table_with_package_and_procedure/customer-handler.pkb: -------------------------------------------------------------------------------- 1 | /* Formatted on 12/5/2019 8:38:20 PM (QP5 v5.354) */ 2 | CREATE OR REPLACE PACKAGE BODY TOAD_USER.customer_handler 3 | AS 4 | PROCEDURE signUpCustomer (name IN VARCHAR2, 5 | description IN VARCHAR2, 6 | username IN VARCHAR2) 7 | IS 8 | BEGIN 9 | INSERT INTO TOAD_USER.CUSTOMERS (id, 10 | NAME, 11 | DESCRIPTION, 12 | USERNAME) 13 | VALUES (CUSTOMER_SEQ.NEXTVAL, 14 | name, 15 | description, 16 | username); 17 | END signUpCustomer; 18 | END customer_handler; 19 | / 20 | -------------------------------------------------------------------------------- /08_Writing_to_table_with_package_and_procedure/customer-handler.pks: -------------------------------------------------------------------------------- 1 | /* Formatted on 12/5/2019 8:35:58 PM (QP5 v5.354) */ 2 | CREATE OR REPLACE PACKAGE TOAD_USER.customer_handler 3 | AS 4 | PROCEDURE signUpCustomer (name IN VARCHAR2, 5 | description IN VARCHAR2, 6 | username IN VARCHAR2); 7 | END customer_handler; 8 | / 9 | -------------------------------------------------------------------------------- /08_Writing_to_table_with_package_and_procedure/readme.MD: -------------------------------------------------------------------------------- 1 | # Creating package and procedure # 2 | # Package Header # 3 | ```sql 4 | /* Formatted on 12/5/2019 8:35:58 PM (QP5 v5.354) */ 5 | CREATE OR REPLACE PACKAGE TOAD_USER.customer_handler 6 | AS 7 | PROCEDURE signUpCustomer (name IN VARCHAR2, 8 | description IN VARCHAR2, 9 | username IN VARCHAR2); 10 | END customer_handler; 11 | / 12 | 13 | ``` 14 | 15 | # Package Body # 16 | ```sql 17 | /* Formatted on 12/5/2019 8:38:20 PM (QP5 v5.354) */ 18 | CREATE OR REPLACE PACKAGE BODY TOAD_USER.customer_handler 19 | AS 20 | PROCEDURE signUpCustomer (name IN VARCHAR2, 21 | description IN VARCHAR2, 22 | username IN VARCHAR2) 23 | IS 24 | BEGIN 25 | INSERT INTO TOAD_USER.CUSTOMERS (id, 26 | NAME, 27 | DESCRIPTION, 28 | USERNAME) 29 | VALUES (CUSTOMER_SEQ.NEXTVAL, 30 | name, 31 | description, 32 | username); 33 | END signUpCustomer; 34 | END customer_handler; 35 | / 36 | ``` 37 | -------------------------------------------------------------------------------- /09_Cursor_Loop_and_Condition/DDL.sql: -------------------------------------------------------------------------------- 1 | ----===================== SCRIPT TO CREATE EMPLOYEES TABLE ================= 2 | CREATE TABLE RAJ.EMPLOYEES 3 | ( 4 | EMPLOYEE_ID NUMBER(6), 5 | FIRST_NAME VARCHAR2(20 BYTE), 6 | LAST_NAME VARCHAR2(25 BYTE) NOT NULL, 7 | EMAIL VARCHAR2(25 BYTE) NOT NULL, 8 | PHONE_NUMBER VARCHAR2(20 BYTE), 9 | HIRE_DATE DATE NOT NULL, 10 | JOB_ID VARCHAR2(10 BYTE)NOT NULL, 11 | SALARY NUMBER(8,2), 12 | COMMISSION_PCT NUMBER(2,2), 13 | MANAGER_ID NUMBER(6), 14 | DEPARTMENT_ID NUMBER(4) 15 | ); 16 | 17 | 18 | ----===================== SCRIPT TO CREATE HISTORY TABLE ================= 19 | CREATE TABLE RAJ.JOB_HISTORY 20 | ( 21 | EMPLOYEE_ID NUMBER(6) NOT NULL, 22 | START_DATE DATE NOT NULL, 23 | END_DATE DATE NOT NULL, 24 | JOB_ID VARCHAR2(10 BYTE) NOT NULL, 25 | DEPARTMENT_ID NUMBER(4) 26 | ) -------------------------------------------------------------------------------- /09_Cursor_Loop_and_Condition/cusor-loop-condition.sql: -------------------------------------------------------------------------------- 1 | DECLARE 2 | CURSOR EMPLOYEE_CURSOR IS 3 | SELECT EMPLOYEE_ID, SALARY, COMMISSION_PCT, COUNT(START_DATE) JOBCOUNT 4 | FROM EMPLOYEES LEFT OUTER JOIN JOB_HISTORY JH 5 | USING(EMPLOYEE_ID) 6 | GROUP BY EMPLOYEE_ID,SALARY,COMMISSION_PCT 7 | ORDER BY 1; 8 | V_BONUS NUMBER(5); 9 | BEGIN 10 | FOR EMPLOYEE_RECORD IN EMPLOYEE_CURSOR 11 | LOOP 12 | IF EMPLOYEE_RECORD.JOBCOUNT > 0 THEN 13 | V_BONUS := EMPLOYEE_RECORD.SALARY * 0.40; 14 | ELSIF EMPLOYEE_RECORD.COMMISSION_PCT IS NOT NULL THEN 15 | V_BONUS := EMPLOYEE_RECORD.SALARY * 0.25; 16 | ELSE 17 | V_BONUS := EMPLOYEE_RECORD.SALARY * 0.35; 18 | END IF; 19 | 20 | DBMS_OUTPUT.PUT_LINE(EMPLOYEE_RECORD.EMPLOYEE_ID || ' - ' || V_BONUS); 21 | END LOOP; 22 | END; 23 | -------------------------------------------------------------------------------- /09_Cursor_Loop_and_Condition/readme.MD: -------------------------------------------------------------------------------- 1 | # Data definition language for test # 2 | ```sql 3 | ----===================== SCRIPT TO CREATE EMPLOYEES TABLE ================= 4 | CREATE TABLE RAJ.EMPLOYEES 5 | ( 6 | EMPLOYEE_ID NUMBER(6), 7 | FIRST_NAME VARCHAR2(20 BYTE), 8 | LAST_NAME VARCHAR2(25 BYTE) NOT NULL, 9 | EMAIL VARCHAR2(25 BYTE) NOT NULL, 10 | PHONE_NUMBER VARCHAR2(20 BYTE), 11 | HIRE_DATE DATE NOT NULL, 12 | JOB_ID VARCHAR2(10 BYTE)NOT NULL, 13 | SALARY NUMBER(8,2), 14 | COMMISSION_PCT NUMBER(2,2), 15 | MANAGER_ID NUMBER(6), 16 | DEPARTMENT_ID NUMBER(4) 17 | ); 18 | 19 | 20 | ----===================== SCRIPT TO CREATE HISTORY TABLE ================= 21 | CREATE TABLE RAJ.JOB_HISTORY 22 | ( 23 | EMPLOYEE_ID NUMBER(6) NOT NULL, 24 | START_DATE DATE NOT NULL, 25 | END_DATE DATE NOT NULL, 26 | JOB_ID VARCHAR2(10 BYTE) NOT NULL, 27 | DEPARTMENT_ID NUMBER(4) 28 | ) 29 | ``` 30 | # Cusor and loop # 31 | ```sql 32 | DECLARE 33 | CURSOR EMPLOYEE_CURSOR IS 34 | SELECT EMPLOYEE_ID, SALARY, COMMISSION_PCT, COUNT(START_DATE) JOBCOUNT 35 | FROM EMPLOYEES LEFT OUTER JOIN JOB_HISTORY JH 36 | USING(EMPLOYEE_ID) 37 | GROUP BY EMPLOYEE_ID,SALARY,COMMISSION_PCT 38 | ORDER BY 1; 39 | V_BONUS NUMBER(5); 40 | BEGIN 41 | FOR EMPLOYEE_RECORD IN EMPLOYEE_CURSOR 42 | LOOP 43 | IF EMPLOYEE_RECORD.JOBCOUNT > 0 THEN 44 | V_BONUS := EMPLOYEE_RECORD.SALARY * 0.40; 45 | ELSIF EMPLOYEE_RECORD.COMMISSION_PCT IS NOT NULL THEN 46 | V_BONUS := EMPLOYEE_RECORD.SALARY * 0.25; 47 | ELSE 48 | V_BONUS := EMPLOYEE_RECORD.SALARY * 0.35; 49 | END IF; 50 | 51 | DBMS_OUTPUT.PUT_LINE(EMPLOYEE_RECORD.EMPLOYEE_ID || ' - ' || V_BONUS); 52 | END LOOP; 53 | END; 54 | ``` 55 | 56 | -------------------------------------------------------------------------------- /10_Procedure/Invoking-procedure.sql: -------------------------------------------------------------------------------- 1 | /* Formatted on 12/19/2019 10:42:41 PM (QP5 v5.354) */ 2 | BEGIN 3 | change_department_manager(100,110); 4 | END; -------------------------------------------------------------------------------- /10_Procedure/Procedure.sql: -------------------------------------------------------------------------------- 1 | /* Formatted on 12/19/2019 10:39:55 PM (QP5 v5.354) */ 2 | CREATE OR REPLACE PROCEDURE change_department_manager (p_deptid IN NUMBER, 3 | p_managerid IN NUMBER) 4 | IS 5 | v_deptid departments.department_id%TYPE; 6 | v_count NUMBER (1); 7 | BEGIN 8 | 9 | SELECT COUNT (*) 10 | INTO v_count 11 | FROM departments 12 | WHERE department_id = p_deptid; 13 | 14 | IF v_count = 0 15 | THEN 16 | raise_application_error (-20100, 'Department not found'); 17 | END IF; 18 | 19 | 20 | SELECT department_id 21 | INTO v_deptid 22 | FROM employees 23 | WHERE employee_id = p_managerid; 24 | 25 | IF v_deptid <> p_deptid 26 | THEN 27 | raise_application_error ( 28 | -20111, 29 | 'Employee does not belong to department he is supposed to head'); 30 | END IF; 31 | 32 | 33 | UPDATE departments 34 | SET manager_id = p_managerid 35 | WHERE department_id = p_deptid; 36 | EXCEPTION 37 | WHEN NO_DATA_FOUND 38 | THEN 39 | raise_application_error (-20110, 'Employee is not found!'); 40 | END; -------------------------------------------------------------------------------- /10_Procedure/readme.MD: -------------------------------------------------------------------------------- 1 | # Procedure in Oracle 11g # 2 | ```sql 3 | /* Formatted on 12/19/2019 10:39:55 PM (QP5 v5.354) */ 4 | CREATE OR REPLACE PROCEDURE change_department_manager (p_deptid IN NUMBER, 5 | p_managerid IN NUMBER) 6 | IS 7 | v_deptid departments.department_id%TYPE; 8 | v_count NUMBER (1); 9 | BEGIN 10 | 11 | SELECT COUNT (*) 12 | INTO v_count 13 | FROM departments 14 | WHERE department_id = p_deptid; 15 | 16 | IF v_count = 0 17 | THEN 18 | raise_application_error (-20100, 'Department not found'); 19 | END IF; 20 | 21 | 22 | SELECT department_id 23 | INTO v_deptid 24 | FROM employees 25 | WHERE employee_id = p_managerid; 26 | 27 | IF v_deptid <> p_deptid 28 | THEN 29 | raise_application_error ( 30 | -20111, 31 | 'Employee does not belong to department he is supposed to head'); 32 | END IF; 33 | 34 | 35 | UPDATE departments 36 | SET manager_id = p_managerid 37 | WHERE department_id = p_deptid; 38 | EXCEPTION 39 | WHEN NO_DATA_FOUND 40 | THEN 41 | raise_application_error (-20110, 'Employee is not found!'); 42 | END; 43 | ``` 44 | 45 | # Invoking procedure in oracle 11g # 46 | ```sql 47 | /* Formatted on 12/19/2019 10:42:41 PM (QP5 v5.354) */ 48 | BEGIN 49 | change_department_manager(100,110); 50 | END; 51 | ``` -------------------------------------------------------------------------------- /11_procedure_and_package/package-body.sql: -------------------------------------------------------------------------------- 1 | create or replace PACKAGE BODY PACKAGE2 AS 2 | 3 | PROCEDURE mergeName(fname IN VARCHAR2, 4 | lname IN VARCHAR2, 5 | mergeNAme OUT VARCHAR2)AS 6 | v_fname VARCHAR2(200); 7 | v_lname VARCHAR2(200); 8 | BEGIN 9 | v_fname :=fname; 10 | v_lname :=lname; 11 | mergeName :=v_fname || v_lname; 12 | 13 | END mergeName; 14 | 15 | 16 | PROCEDURE provideNameWithAddress(address IN VARCHAR2, 17 | nameWithAddress OUT VARCHAR2) AS 18 | 19 | v_address VARCHAR2(200); 20 | v_mergeName VARCHAR2(200); 21 | BEGIN 22 | 23 | v_address :=address; 24 | mergeName('Raj','Bhatta',v_mergeName); 25 | nameWithAddress :=v_mergeName || v_address; 26 | 27 | dbms_output.put_line(nameWithAddress); 28 | 29 | END provideNameWithAddress; 30 | 31 | 32 | END PACKAGE2; -------------------------------------------------------------------------------- /11_procedure_and_package/package-header.sql: -------------------------------------------------------------------------------- 1 | create or replace PACKAGE PACKAGE2 AS 2 | 3 | PROCEDURE mergeName(fname IN VARCHAR2, 4 | lname IN VARCHAR2, 5 | mergeNAme OUT VARCHAR2); 6 | 7 | PROCEDURE provideNameWithAddress(address IN VARCHAR2, 8 | nameWithAddress OUT VARCHAR2); 9 | 10 | END PACKAGE2; -------------------------------------------------------------------------------- /11_procedure_and_package/query.sql: -------------------------------------------------------------------------------- 1 | DECLARE 2 | nameWithAddress VARCHAR2(200); 3 | 4 | BEGIN 5 | 6 | package2.providenamewithaddress('Ontario, Canada',nameWithAddress); 7 | 8 | dbms_output.put_line(nameWithAddress); 9 | 10 | END; -------------------------------------------------------------------------------- /11_procedure_and_package/readme.MD: -------------------------------------------------------------------------------- 1 | # Oracle procedure call # 2 | ```sql 3 | DECLARE 4 | nameWithAddress VARCHAR2(200); 5 | 6 | BEGIN 7 | 8 | package2.providenamewithaddress('Ontario, Canada',nameWithAddress); 9 | 10 | dbms_output.put_line(nameWithAddress); 11 | 12 | END; 13 | ``` 14 | 15 | # Oracle package body # 16 | ```sql 17 | create or replace PACKAGE BODY PACKAGE2 AS 18 | 19 | PROCEDURE mergeName(fname IN VARCHAR2, 20 | lname IN VARCHAR2, 21 | mergeNAme OUT VARCHAR2)AS 22 | v_fname VARCHAR2(200); 23 | v_lname VARCHAR2(200); 24 | BEGIN 25 | v_fname :=fname; 26 | v_lname :=lname; 27 | mergeName :=v_fname || v_lname; 28 | 29 | END mergeName; 30 | 31 | 32 | PROCEDURE provideNameWithAddress(address IN VARCHAR2, 33 | nameWithAddress OUT VARCHAR2) AS 34 | 35 | v_address VARCHAR2(200); 36 | v_mergeName VARCHAR2(200); 37 | BEGIN 38 | 39 | v_address :=address; 40 | mergeName('Raj','Bhatta',v_mergeName); 41 | nameWithAddress :=v_mergeName || v_address; 42 | 43 | dbms_output.put_line(nameWithAddress); 44 | 45 | END provideNameWithAddress; 46 | 47 | 48 | END PACKAGE2; 49 | ``` 50 | 51 | # Oracle package header # 52 | ```sql 53 | create or replace PACKAGE PACKAGE2 AS 54 | 55 | PROCEDURE mergeName(fname IN VARCHAR2, 56 | lname IN VARCHAR2, 57 | mergeNAme OUT VARCHAR2); 58 | 59 | PROCEDURE provideNameWithAddress(address IN VARCHAR2, 60 | nameWithAddress OUT VARCHAR2); 61 | 62 | END PACKAGE2; 63 | ``` -------------------------------------------------------------------------------- /12_RESTful_API_call_using_UTL_HTTP/readme.MD: -------------------------------------------------------------------------------- 1 | # How to make a API call using UTL_HTTP in 11g # 2 | ```sql 3 | create or replace PACKAGE BODY DB_test.package_test AS 4 | 5 | PROCEDURE SENDUSER_TO_SERVER(name in VARCHAR2 6 | ,address in VARCHAR2 7 | ,phone in NUMBER) IS 8 | 9 | req utl_http.req; 10 | res utl_http.resp; 11 | buffer varchar2(4000); 12 | url varchar2(4000); 13 | v_name varchar2(4000); 14 | v_address varchar2(4000); 15 | v_phone NUMBER; 16 | v_requestbody VARCHAR2(5000); 17 | 18 | BEGIN 19 | 20 | url varchar2(4000) := 'http://localhost:8080/springapp/takeuser'; 21 | v_name := 'Raj Bhatta'; 22 | v_address := '10644 105 St, Edmonton'; 23 | v_phone := 4379832323; 24 | 25 | v_requestbody varchar2(4000) := '{"name":"'||v_name||'", "address":"'||v_address||'", "phone":'||v_phone||'}'; 26 | 27 | req := utl_http.begin_request(url, 'POST',' HTTP/1.1'); 28 | utl_http.set_header(req, 'user-agent', 'mozilla/4.0'); 29 | utl_http.set_header(req, 'content-type', 'application/json'); 30 | utl_http.set_header(req, 'Content-Length', length(v_requestbody)); 31 | 32 | utl_http.write_text(req, content); 33 | res := utl_http.get_response(req); 34 | -- process the response from the HTTP call 35 | begin 36 | loop 37 | utl_http.read_line(res, buffer); 38 | dbms_output.put_line(buffer); 39 | end loop; 40 | utl_http.end_response(res); 41 | exception 42 | when utl_http.end_of_body 43 | then 44 | utl_http.end_response(res); 45 | 46 | 47 | END SENDUSER_TO_SERVER; 48 | END package_test; 49 | ``` -------------------------------------------------------------------------------- /12_RESTful_API_call_using_UTL_HTTP/rest-request-plsql.sql: -------------------------------------------------------------------------------- 1 | create or replace PACKAGE BODY DB_test.package_test AS 2 | 3 | PROCEDURE SENDUSER_TO_SERVER(name in VARCHAR2 4 | ,address in VARCHAR2 5 | ,phone in NUMBER) IS 6 | 7 | req utl_http.req; 8 | res utl_http.resp; 9 | buffer varchar2(4000); 10 | url varchar2(4000); 11 | v_name varchar2(4000); 12 | v_address varchar2(4000); 13 | v_phone NUMBER; 14 | v_requestbody VARCHAR2(5000); 15 | 16 | BEGIN 17 | 18 | url varchar2(4000) := 'http://localhost:8080/springapp/takeuser'; 19 | v_name := 'Raj Bhatta'; 20 | v_address := '10644 105 St, Edmonton'; 21 | v_phone := 4379832323; 22 | 23 | v_requestbody varchar2(4000) := '{"name":"'||v_name||'", "address":"'||v_address||'", "phone":'||v_phone||'}'; 24 | 25 | req := utl_http.begin_request(url, 'POST',' HTTP/1.1'); 26 | utl_http.set_header(req, 'user-agent', 'mozilla/4.0'); 27 | utl_http.set_header(req, 'content-type', 'application/json'); 28 | utl_http.set_header(req, 'Content-Length', length(v_requestbody)); 29 | 30 | utl_http.write_text(req, content); 31 | res := utl_http.get_response(req); 32 | -- process the response from the HTTP call 33 | begin 34 | loop 35 | utl_http.read_line(res, buffer); 36 | dbms_output.put_line(buffer); 37 | end loop; 38 | utl_http.end_response(res); 39 | exception 40 | when utl_http.end_of_body 41 | then 42 | utl_http.end_response(res); 43 | 44 | 45 | END SENDUSER_TO_SERVER; 46 | END package_test; 47 | -------------------------------------------------------------------------------- /13_Generic_way_to_get_data_from_table_using_Colum_name/package-body.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE 2 | PACKAGE BODY READING_TABLE AS 3 | 4 | PROCEDURE READ_FROM_TABLE(COLUMN_NAME IN VARCHAR2, 5 | RETURN_VALUE OUT VARCHAR2) IS 6 | 7 | CURSOR cursor_value IS 8 | SELECT KEYVALUE FROM TBL_TEST where LOWER(KEYNAME)= lower(COLUMN_NAME); 9 | 10 | BEGIN 11 | 12 | OPEN cursor_value; 13 | FETCH cursor_value INTO RETURN_VALUE; 14 | close cursor_value; 15 | 16 | END READ_FROM_TABLE; 17 | 18 | 19 | END READING_TABLE; -------------------------------------------------------------------------------- /13_Generic_way_to_get_data_from_table_using_Colum_name/package-header.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE 2 | PACKAGE READING_TABLE AS 3 | 4 | PROCEDURE READ_FROM_TABLE(COLUMN_NAME IN VARCHAR2, 5 | RETURN_VALUE OUT VARCHAR2); 6 | 7 | END READING_TABLE; -------------------------------------------------------------------------------- /13_Generic_way_to_get_data_from_table_using_Colum_name/query.sql: -------------------------------------------------------------------------------- 1 | DECLARE 2 | 3 | className TBL_TEST.KEYNAME%TYPE; 4 | 5 | BEGIN 6 | READING_TABLE.READ_FROM_TABLE('CLASS_NAME',className); 7 | dbms_output.put_line(className); 8 | 9 | END; -------------------------------------------------------------------------------- /13_Generic_way_to_get_data_from_table_using_Colum_name/readme.MD: -------------------------------------------------------------------------------- 1 | # Generic way to get data from table using column name # 2 | 3 | ## Query ## 4 | ```sql 5 | DECLARE 6 | 7 | className TBL_TEST.KEYNAME%TYPE; 8 | 9 | BEGIN 10 | READING_TABLE.READ_FROM_TABLE('CLASS_NAME',className); 11 | dbms_output.put_line(className); 12 | 13 | END; 14 | ``` 15 | 16 | ## Header ## 17 | 18 | ```sql 19 | CREATE OR REPLACE 20 | PACKAGE READING_TABLE AS 21 | 22 | PROCEDURE READ_FROM_TABLE(COLUMN_NAME IN VARCHAR2, 23 | RETURN_VALUE OUT VARCHAR2); 24 | 25 | END READING_TABLE; 26 | ``` 27 | 28 | ## Body ## 29 | 30 | ```sql 31 | CREATE OR REPLACE 32 | PACKAGE BODY READING_TABLE AS 33 | 34 | PROCEDURE READ_FROM_TABLE(COLUMN_NAME IN VARCHAR2, 35 | RETURN_VALUE OUT VARCHAR2) IS 36 | 37 | CURSOR cursor_value IS 38 | SELECT KEYVALUE FROM TBL_TEST where LOWER(KEYNAME)= lower(COLUMN_NAME); 39 | 40 | BEGIN 41 | 42 | OPEN cursor_value; 43 | FETCH cursor_value INTO RETURN_VALUE; 44 | close cursor_value; 45 | 46 | END READ_FROM_TABLE; 47 | 48 | 49 | END READING_TABLE; 50 | ``` -------------------------------------------------------------------------------- /13_Generic_way_to_get_data_from_table_using_Colum_name/table-script.sql: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------- 2 | -- File created - Monday-July-22-2019 3 | -------------------------------------------------------- 4 | -------------------------------------------------------- 5 | -- DDL for Table TBL_TEST 6 | -------------------------------------------------------- 7 | 8 | CREATE TABLE "HR"."TBL_TEST" 9 | ( "KEYNAME" VARCHAR2(200 BYTE), 10 | "KEYVALUE" VARCHAR2(200 BYTE) 11 | ) SEGMENT CREATION IMMEDIATE 12 | PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING 13 | STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 14 | PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) 15 | TABLESPACE "USERS" ; 16 | REM INSERTING into HR.TBL_TEST 17 | SET DEFINE OFF; 18 | Insert into HR.TBL_TEST (KEYNAME,KEYVALUE) values ('CLASS_NAME','sun.jdbc.odbc.JdbcOdbcDriver'); 19 | Insert into HR.TBL_TEST (KEYNAME,KEYVALUE) values ('PORT','1521'); 20 | Insert into HR.TBL_TEST (KEYNAME,KEYVALUE) values ('DATABASE_NAME','DB_Test'); 21 | Insert into HR.TBL_TEST (KEYNAME,KEYVALUE) values ('URL','jdbc:odbc:datasource'); 22 | -------------------------------------------------------------------------------- /14_Connection_to_database_using_sqlplus_using_service_name/README.MD: -------------------------------------------------------------------------------- 1 | # Making connection to oracle 11g using service name # 2 | ```sql 3 | --1. goto command prompt 4 | --2. sqlplus username/password@host:port/service 5 | 6 | ---======= Example ================= 7 | sqlplus rajbhatta/rajbhattapwd@app.raj.test.net:1442/springapp.oracle.test 8 | 9 | 10 | 11 | --- ====Setting TNS_ADMIN during session level ======== 12 | set tns_admin=c:\temp 13 | 14 | 15 | --- ========== Useful links ========================= 16 | https://stackoverflow.com/questions/37711482/how-to-install-oracle-instant-client-on-a-mac 17 | ``` -------------------------------------------------------------------------------- /14_Connection_to_database_using_sqlplus_using_service_name/connection.sql: -------------------------------------------------------------------------------- 1 | --1. goto command prompt 2 | --2. sqlplus username/password@host:port/service 3 | 4 | ---======= Example ================= 5 | sqlplus rajbhatta/rajbhattapwd@app.raj.test.net:1442/springapp.oracle.test 6 | 7 | 8 | 9 | --- ====Setting TNS_ADMIN during session level ======== 10 | set tns_admin=c:\temp 11 | 12 | 13 | --- ========== Useful links ========================= 14 | https://stackoverflow.com/questions/37711482/how-to-install-oracle-instant-client-on-a-mac 15 | -------------------------------------------------------------------------------- /15_How_to_make_deployment_script_in_oracle/insert-package.sql: -------------------------------------------------------------------------------- 1 | create or replace PACKAGE BODY DB_test.package_test AS 2 | 3 | PROCEDURE displayFirstName(fname in varchar2) IS 4 | BEGIN 5 | dbms_output.put_line('Hi there your first name is ' || fname); 6 | END displayFirstName; 7 | 8 | END package_test; 9 | -------------------------------------------------------------------------------- /15_How_to_make_deployment_script_in_oracle/insert1.sql: -------------------------------------------------------------------------------- 1 | PROMPT ==================================================== 2 | PROMPT start checking already presented information from tbl_INFO 3 | PROMPT =================================================== 4 | 5 | select * from tbl_INFO where name='James'; 6 | 7 | PROMPT ==================================================== 8 | PROMPT end checking already presented information from tbl_INFO 9 | PROMPT =================================================== 10 | 11 | 12 | PROMPT ==================================================== 13 | PROMPT start of insert or update into insert1.sql 14 | PROMPT =================================================== 15 | 16 | 17 | MERGE INTO tbl_INFO TI USING 18 | (SELECT name AS TI_name from DULA) DI 19 | on (TI.name=DI.name) 20 | WHEN NOT MATCHED THEN 21 | INSERT (NAME, PHONE) VAUES ('James', '4372322234234') 22 | WHEN MATCHED THEN 23 | UPDATE set 24 | TI.NAME=DI.NAME, 25 | TI.PHONE=DI.PHONE; 26 | 27 | PROMPT ==================================================== 28 | PROMPT end of insert or update into insert1.sql 29 | PROMPT =================================================== 30 | -------------------------------------------------------------------------------- /15_How_to_make_deployment_script_in_oracle/master-deployment.sql: -------------------------------------------------------------------------------- 1 | -- Date: 2019/8/17 2 | -- Prepared by : Raj Bhatta 3 | 4 | spool deployment_test.log 5 | set define off 6 | 7 | set trimspool on; 8 | set newpage none; 9 | set linesize 1512; 10 | set pagesize 1231; 11 | sset colsep '|'; 12 | set serveroutput on; 13 | 14 | PROMPT ==================================================== 15 | PROMPT start of insert into tbl_INFO table 16 | PROMPT =================================================== 17 | 18 | @insert1.sql 19 | 20 | PROMPT ==================================================== 21 | PROMPT End of insert into tbl_INFO table 22 | PROMPT =================================================== 23 | 24 | 25 | PROMPT ==================================================== 26 | PROMPT start of package update 27 | PROMPT =================================================== 28 | 29 | @insert-package.sql 30 | 31 | PROMPT ==================================================== 32 | PROMPT End of package update 33 | PROMPT =================================================== 34 | -------------------------------------------------------------------------------- /15_How_to_make_deployment_script_in_oracle/readme.MD: -------------------------------------------------------------------------------- 1 | ## How to execute script in Sql ## 2 | 1. Goto sqlplus 3 | 2. Goto directory using CD command where you do have file. 4 | 3. @master-deployment.sql 5 | 6 | # Deployment script # 7 | ```sql 8 | Master deployment script 9 | 10 | -- Date: 2019/8/17 11 | -- Prepared by : Raj Bhatta 12 | 13 | spool deployment_test.log 14 | set define off 15 | 16 | set trimspool on; 17 | set newpage none; 18 | set linesize 1512; 19 | set pagesize 1231; 20 | sset colsep '|'; 21 | set serveroutput on; 22 | 23 | PROMPT ==================================================== 24 | PROMPT start of insert into tbl_INFO table 25 | PROMPT =================================================== 26 | 27 | @insert1.sql 28 | 29 | PROMPT ==================================================== 30 | PROMPT End of insert into tbl_INFO table 31 | PROMPT =================================================== 32 | 33 | 34 | PROMPT ==================================================== 35 | PROMPT start of package update 36 | PROMPT =================================================== 37 | 38 | @insert-package.sql 39 | 40 | PROMPT ==================================================== 41 | PROMPT End of package update 42 | PROMPT =================================================== 43 | 44 | ``` 45 | 46 | ```sql 47 | Regression test package 48 | 49 | create or replace PACKAGE BODY DB_test.package_test AS 50 | 51 | PROCEDURE displayFirstName(fname in varchar2) IS 52 | BEGIN 53 | dbms_output.put_line('Hi there your first name is ' || fname); 54 | END displayFirstName; 55 | 56 | END package_test; 57 | ``` 58 | 59 | ```sql 60 | Operation script 61 | 62 | PROMPT ==================================================== 63 | PROMPT start checking already presented information from tbl_INFO 64 | PROMPT =================================================== 65 | 66 | select * from tbl_INFO where name='br'; 67 | 68 | PROMPT ==================================================== 69 | PROMPT end checking already presented information from tbl_INFO 70 | PROMPT =================================================== 71 | 72 | 73 | PROMPT ==================================================== 74 | PROMPT start of insert or update into insert1.sql 75 | PROMPT =================================================== 76 | 77 | 78 | MERGE INTO tbl_INFO TI USING 79 | (SELECT name AS TI_name from DULA) DI 80 | on (TI.name=DI.name) 81 | WHEN NOT MATCHED THEN 82 | INSERT (NAME, PHONE) VAUES ('br', '4372322234234') 83 | WHEN MATCHED THEN 84 | UPDATE set 85 | TI.NAME=DI.NAME, 86 | TI.PHONE=DI.PHONE; 87 | 88 | PROMPT ==================================================== 89 | PROMPT end of insert or update into insert1.sql 90 | PROMPT =================================================== 91 | ``` -------------------------------------------------------------------------------- /16_Function_using_PL_SQL/function-call-plsql.sql: -------------------------------------------------------------------------------- 1 | /* Formatted on 12/19/2019 11:15:35 PM (QP5 v5.354) */ 2 | BEGIN 3 | DBMS_OUTPUT.put_line (manager_job_history (20)); 4 | END; -------------------------------------------------------------------------------- /16_Function_using_PL_SQL/function-pl-sql.sql: -------------------------------------------------------------------------------- 1 | /* Formatted on 12/19/2019 11:13:09 PM (QP5 v5.354) */ 2 | CREATE OR REPLACE FUNCTION manager_job_history (p_dept NUMBER) 3 | RETURN NUMBER 4 | IS 5 | v_manager departments.manager_id%TYPE; 6 | v_count NUMBER (2); 7 | BEGIN 8 | SELECT manager_id 9 | INTO v_manager 10 | FROM departments 11 | WHERE department_id = p_dept; 12 | 13 | IF v_manager IS NULL 14 | THEN 15 | RETURN NULL; 16 | ELSE 17 | SELECT COUNT (*) 18 | INTO v_count 19 | FROM job_history 20 | WHERE employee_id = v_manager; 21 | 22 | RETURN v_count; 23 | END IF; 24 | EXCEPTION 25 | WHEN NO_DATA_FOUND 26 | THEN 27 | raise_application_error (-20500, 'Department not found'); 28 | END; -------------------------------------------------------------------------------- /16_Function_using_PL_SQL/readme.MD: -------------------------------------------------------------------------------- 1 | # How to use function in 11g # 2 | 3 | ```sql 4 | 5 | Function prototyp 6 | 7 | CREATE OR REPLACE FUNCTION manager_job_history (p_dept NUMBER) 8 | RETURN NUMBER 9 | IS 10 | v_manager departments.manager_id%TYPE; 11 | v_count NUMBER (2); 12 | BEGIN 13 | SELECT manager_id 14 | INTO v_manager 15 | FROM departments 16 | WHERE department_id = p_dept; 17 | 18 | IF v_manager IS NULL 19 | THEN 20 | RETURN NULL; 21 | ELSE 22 | SELECT COUNT (*) 23 | INTO v_count 24 | FROM job_history 25 | WHERE employee_id = v_manager; 26 | 27 | RETURN v_count; 28 | END IF; 29 | EXCEPTION 30 | WHEN NO_DATA_FOUND 31 | THEN 32 | raise_application_error (-20500, 'Department not found'); 33 | END; 34 | ``` 35 | 36 | ```sql 37 | 38 | Function call 39 | 40 | BEGIN 41 | DBMS_OUTPUT.put_line (manager_job_history (20)); 42 | END; 43 | ``` -------------------------------------------------------------------------------- /17_Schedular_Job_to_call_procedure/readme.MD: -------------------------------------------------------------------------------- 1 | # Schedule or job in 11g # 2 | ```sql 3 | BEGIN 4 | SYS.DBMS_SCHEDULER.DROP_JOB 5 | (job_name => 'RAJ.CHANGE_DEPARTMENT_MANAGER_JOB'); 6 | END; 7 | / 8 | 9 | BEGIN 10 | SYS.DBMS_SCHEDULER.CREATE_JOB 11 | ( 12 | job_name => 'RAJ.CHANGE_DEPARTMENT_MANAGER_JOB' 13 | ,start_date => TO_TIMESTAMP_TZ('2019/12/19 23:23:32.302000 -07:00','yyyy/mm/dd hh24:mi:ss.ff tzr') 14 | ,repeat_interval => 'FREQ=DAILY;INTERVAL=1' 15 | ,end_date => NULL 16 | ,job_class => 'DEFAULT_JOB_CLASS' 17 | ,job_type => 'PLSQL_BLOCK' 18 | ,job_action => 'RAJ.change_department_manager;' 19 | ,comments => NULL 20 | ); 21 | SYS.DBMS_SCHEDULER.SET_ATTRIBUTE 22 | ( name => 'RAJ.CHANGE_DEPARTMENT_MANAGER_JOB' 23 | ,attribute => 'RESTARTABLE' 24 | ,value => FALSE); 25 | SYS.DBMS_SCHEDULER.SET_ATTRIBUTE 26 | ( name => 'RAJ.CHANGE_DEPARTMENT_MANAGER_JOB' 27 | ,attribute => 'LOGGING_LEVEL' 28 | ,value => SYS.DBMS_SCHEDULER.LOGGING_OFF); 29 | SYS.DBMS_SCHEDULER.SET_ATTRIBUTE_NULL 30 | ( name => 'RAJ.CHANGE_DEPARTMENT_MANAGER_JOB' 31 | ,attribute => 'MAX_FAILURES'); 32 | SYS.DBMS_SCHEDULER.SET_ATTRIBUTE_NULL 33 | ( name => 'RAJ.CHANGE_DEPARTMENT_MANAGER_JOB' 34 | ,attribute => 'MAX_RUNS'); 35 | SYS.DBMS_SCHEDULER.SET_ATTRIBUTE 36 | ( name => 'RAJ.CHANGE_DEPARTMENT_MANAGER_JOB' 37 | ,attribute => 'STOP_ON_WINDOW_CLOSE' 38 | ,value => FALSE); 39 | SYS.DBMS_SCHEDULER.SET_ATTRIBUTE 40 | ( name => 'RAJ.CHANGE_DEPARTMENT_MANAGER_JOB' 41 | ,attribute => 'JOB_PRIORITY' 42 | ,value => 3); 43 | SYS.DBMS_SCHEDULER.SET_ATTRIBUTE_NULL 44 | ( name => 'RAJ.CHANGE_DEPARTMENT_MANAGER_JOB' 45 | ,attribute => 'SCHEDULE_LIMIT'); 46 | SYS.DBMS_SCHEDULER.SET_ATTRIBUTE 47 | ( name => 'RAJ.CHANGE_DEPARTMENT_MANAGER_JOB' 48 | ,attribute => 'AUTO_DROP' 49 | ,value => TRUE); 50 | 51 | SYS.DBMS_SCHEDULER.ENABLE 52 | (name => 'RAJ.CHANGE_DEPARTMENT_MANAGER_JOB'); 53 | END; 54 | / 55 | ``` -------------------------------------------------------------------------------- /17_Schedular_Job_to_call_procedure/schedular-job.sql: -------------------------------------------------------------------------------- 1 | BEGIN 2 | SYS.DBMS_SCHEDULER.DROP_JOB 3 | (job_name => 'RAJ.CHANGE_DEPARTMENT_MANAGER_JOB'); 4 | END; 5 | / 6 | 7 | BEGIN 8 | SYS.DBMS_SCHEDULER.CREATE_JOB 9 | ( 10 | job_name => 'RAJ.CHANGE_DEPARTMENT_MANAGER_JOB' 11 | ,start_date => TO_TIMESTAMP_TZ('2019/12/19 23:23:32.302000 -07:00','yyyy/mm/dd hh24:mi:ss.ff tzr') 12 | ,repeat_interval => 'FREQ=DAILY;INTERVAL=1' 13 | ,end_date => NULL 14 | ,job_class => 'DEFAULT_JOB_CLASS' 15 | ,job_type => 'PLSQL_BLOCK' 16 | ,job_action => 'RAJ.change_department_manager;' 17 | ,comments => NULL 18 | ); 19 | SYS.DBMS_SCHEDULER.SET_ATTRIBUTE 20 | ( name => 'RAJ.CHANGE_DEPARTMENT_MANAGER_JOB' 21 | ,attribute => 'RESTARTABLE' 22 | ,value => FALSE); 23 | SYS.DBMS_SCHEDULER.SET_ATTRIBUTE 24 | ( name => 'RAJ.CHANGE_DEPARTMENT_MANAGER_JOB' 25 | ,attribute => 'LOGGING_LEVEL' 26 | ,value => SYS.DBMS_SCHEDULER.LOGGING_OFF); 27 | SYS.DBMS_SCHEDULER.SET_ATTRIBUTE_NULL 28 | ( name => 'RAJ.CHANGE_DEPARTMENT_MANAGER_JOB' 29 | ,attribute => 'MAX_FAILURES'); 30 | SYS.DBMS_SCHEDULER.SET_ATTRIBUTE_NULL 31 | ( name => 'RAJ.CHANGE_DEPARTMENT_MANAGER_JOB' 32 | ,attribute => 'MAX_RUNS'); 33 | SYS.DBMS_SCHEDULER.SET_ATTRIBUTE 34 | ( name => 'RAJ.CHANGE_DEPARTMENT_MANAGER_JOB' 35 | ,attribute => 'STOP_ON_WINDOW_CLOSE' 36 | ,value => FALSE); 37 | SYS.DBMS_SCHEDULER.SET_ATTRIBUTE 38 | ( name => 'RAJ.CHANGE_DEPARTMENT_MANAGER_JOB' 39 | ,attribute => 'JOB_PRIORITY' 40 | ,value => 3); 41 | SYS.DBMS_SCHEDULER.SET_ATTRIBUTE_NULL 42 | ( name => 'RAJ.CHANGE_DEPARTMENT_MANAGER_JOB' 43 | ,attribute => 'SCHEDULE_LIMIT'); 44 | SYS.DBMS_SCHEDULER.SET_ATTRIBUTE 45 | ( name => 'RAJ.CHANGE_DEPARTMENT_MANAGER_JOB' 46 | ,attribute => 'AUTO_DROP' 47 | ,value => TRUE); 48 | 49 | SYS.DBMS_SCHEDULER.ENABLE 50 | (name => 'RAJ.CHANGE_DEPARTMENT_MANAGER_JOB'); 51 | END; 52 | / 53 | -------------------------------------------------------------------------------- /18_Database_link/DB-link.sql: -------------------------------------------------------------------------------- 1 | CREATE DATABASE LINK DB_TEST_RAJ_LINK 2 | CONNECT TO RAJ IDENTIFIED BY RAJ123$ 3 | USING 'DB_TEST_RAJ'; 4 | 5 | 6 | ----===========Sample query to use Database link == 7 | SELECT * FROM EMPLOYEES@DB_TEST_RAJ_LINK; -------------------------------------------------------------------------------- /18_Database_link/readme.MD: -------------------------------------------------------------------------------- 1 | # Database link in 11g # 2 | 3 | ## Database link creating query ## 4 | ```sql 5 | 6 | CREATE DATABASE LINK DB_TEST_RAJ_LINK 7 | CONNECT TO RAJ IDENTIFIED BY RAJ123$ 8 | USING 'DB_TEST_RAJ'; 9 | 10 | 11 | ``` 12 | 13 | ## Database link verification query ## 14 | ```sql 15 | SELECT * FROM EMPLOYEES@DB_TEST_RAJ_LINK; 16 | ``` -------------------------------------------------------------------------------- /19_How_to_use_Trigger_in_PLSQL/README.MD: -------------------------------------------------------------------------------- 1 | # How to use trigger # 2 | ```sql 3 | 4 | Trigger 5 | 6 | create or replace trigger trg_salary_check 7 | before update of salary 8 | on employees 9 | for each row 10 | when (old.salary <> new.salary) 11 | begin 12 | if :new.salary < :old.salary then 13 | raise_application_error(-20200,'Salary cannot be decreased'); 14 | else 15 | insert into salary_history 16 | values (:new.employee_id, :old.salary, :new.salary,sysdate); 17 | end if; 18 | end; 19 | 20 | ``` 21 | 22 | ```sql 23 | 24 | trigger hitting table 25 | 26 | create table salary_history 27 | ( 28 | employee_id number(5) references employees on delete cascade, 29 | old_salary number(6), 30 | new_salary number(6), 31 | changedon date, 32 | primary key (employee_id, changedon) 33 | ); 34 | 35 | ``` 36 | 37 | 38 | ## Trigger demo ## 39 | ```sql 40 | 41 | update employees set salary = salary + 1000 42 | where employee_id = 150 43 | 44 | ------------------- 45 | select * from salary_history 46 | 47 | ``` -------------------------------------------------------------------------------- /19_How_to_use_Trigger_in_PLSQL/Trigger-hit-table.sql: -------------------------------------------------------------------------------- 1 | create table salary_history 2 | ( 3 | employee_id number(5) references employees on delete cascade, 4 | old_salary number(6), 5 | new_salary number(6), 6 | changedon date, 7 | primary key (employee_id, changedon) 8 | ); -------------------------------------------------------------------------------- /19_How_to_use_Trigger_in_PLSQL/Trigger.sql: -------------------------------------------------------------------------------- 1 | create or replace trigger trg_salary_check 2 | before update of salary 3 | on employees 4 | for each row 5 | when (old.salary <> new.salary) 6 | begin 7 | if :new.salary < :old.salary then 8 | raise_application_error(-20200,'Salary cannot be decreased'); 9 | else 10 | insert into salary_history 11 | values (:new.employee_id, :old.salary, :new.salary,sysdate); 12 | end if; 13 | end; -------------------------------------------------------------------------------- /19_How_to_use_Trigger_in_PLSQL/Trigger_demo.sql: -------------------------------------------------------------------------------- 1 | update employees set salary = salary + 1000 2 | where employee_id = 150 3 | 4 | ------------------- 5 | select * from salary_history -------------------------------------------------------------------------------- /20_Package_and_procedure_in_PL-SQL_v2/Calling-procedure-from-package.sql: -------------------------------------------------------------------------------- 1 | DECLARE 2 | BEGIN 3 | package_test.displayfirstname('Raj Bhatta'); 4 | END; 5 | / 6 | -------------------------------------------------------------------------------- /20_Package_and_procedure_in_PL-SQL_v2/Oracle-package-body.sql: -------------------------------------------------------------------------------- 1 | create or replace PACKAGE BODY package_test AS 2 | 3 | PROCEDURE displayFirstName(fname in varchar2) IS 4 | BEGIN 5 | dbms_output.put_line('Hi there your first name is ' || fname); 6 | END displayFirstName; 7 | 8 | END package_test; 9 | -------------------------------------------------------------------------------- /20_Package_and_procedure_in_PL-SQL_v2/Oracle-package-header.sql: -------------------------------------------------------------------------------- 1 | create or replace PACKAGE package_test AS 2 | 3 | PROCEDURE displayFirstName(fname in varchar2); 4 | 5 | END package_test; 6 | -------------------------------------------------------------------------------- /20_Package_and_procedure_in_PL-SQL_v2/readme.MD: -------------------------------------------------------------------------------- 1 | # How to use package and procedure version 2 # 2 | ```sql 3 | 4 | Package HEAD 5 | 6 | create or replace PACKAGE package_test AS 7 | 8 | PROCEDURE displayFirstName(fname in varchar2); 9 | 10 | END package_test; 11 | 12 | 13 | ``` 14 | 15 | ```sql 16 | 17 | Pakage Body 18 | 19 | create or replace PACKAGE BODY package_test AS 20 | 21 | PROCEDURE displayFirstName(fname in varchar2) IS 22 | BEGIN 23 | dbms_output.put_line('Hi there your first name is ' || fname); 24 | END displayFirstName; 25 | 26 | END package_test; 27 | 28 | ``` 29 | 30 | ```sql 31 | 32 | Invoke procedure from package 33 | 34 | DECLARE 35 | BEGIN 36 | package_test.displayfirstname('Raj Bhatta'); 37 | END; 38 | / 39 | 40 | ``` -------------------------------------------------------------------------------- /21_What_to_do_if_username_and_password_is_lost_in_oracle/readme.MD: -------------------------------------------------------------------------------- 1 | # How to unlock user if all users are locaked and you forgot password 11g # 2 | 1. goto command 3 | 2. type sqlplus/nolog 4 | 3. connect sys as sysdba 5 | 4. enter password that you have entered during oracle installation 6 | 5. alter user HR account unlock; 7 | 6. alter user HR identified by HR; 8 | 7. exit 9 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Table of contents # 2 | 1. How to install sqlplus using instant client on mac -- > Click here 3 | 4 | 2. How to install sqlplus using instant client on Windows -- > Click here 5 | 6 | 3. How to download and install oracle server -- > Click here 7 | 8 | 4. Providing a role in oracle database -- > Click here 9 | 10 | 5. Creating temporary and permanent tablespace -- > Click here 11 | 12 | 6. Creating user role and tablespace -- > Click here 13 | 14 | 7. Creating a table and sequence -- > Click here 15 | 16 | 8. Writing to table with procedure and package -- > Click here 17 | 18 | 9. Cusor and look -- > Click here 19 | 20 | 10. Procedure --> Click here 21 | 22 | 11. Procedure and package -- > Click here 23 | 24 | 12. Restful API call from database -- > Click here 25 | 26 | 13. Generic way to get data from table using column name -- > Click here 27 | 28 | 14. Connection to database using servicename -- > Click here 29 | 30 | 15. Function -- > Click here 31 | 32 | 16. Schedular -- > Click here 33 | 34 | 17. Database link -- > Click here 35 | 36 | 18. How to use trigger -- > Click here 37 | 38 | 19. Package and procedure version 2 -- > Click here 39 | 40 | 21. Techniques to reset password -- > Click here --------------------------------------------------------------------------------