Skip to main content

PLSQL programming ( Learn by examples - Part 3 )

/**
In this section , lets learn the following.
How to use a for loop to process multiple records...
**/
set serveroutput on size 100000
begin
--Select objects of table type that are valid under the schema Susil
for var in (Select * from all_objects where object_name not like '%$%' and object_name in ('EMPLOYEE','EMP') and status='VALID' and owner='SUSIL')
loop
if var.object_type='TABLE'
then
/*
Dbms_metadata package provides us a function get_ddl to get the data definition on object.
For your understanding , i have just chosen two tables in this example
If you remove Object_name condition in the above SQL , it will print DDL definitions for all tables under the specified schema
**/
dbms_output.put_line('=====================================================================');
dbms_output.put_line('Table name =>'||var.object_name);
dbms_output.put_line('=====================================================================');
dbms_output.put_line(' Table definition is below ');
dbms_output.put_line('=====================================================================');
dbms_output.put_line(dbms_metadata.get_ddl(var.object_type,var.object_name,var.owner));
dbms_output.put_line('=====================================================================');
end if;
end loop;

end;
/

Output:

=====================================================================
Table name =>EMP
=====================================================================
Table definition is below
=====================================================================

CREATE TABLE "SUSIL"."EMP"
( "ENAME" VARCHAR2(10),
"SAL" NUMBER(7,2)
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 131072 NEXT 131072 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "USER_TS"

=====================================================================
=====================================================================
Table name =>EMPLOYEE
=====================================================================
Table definition is below
=====================================================================
CREATE TABLE "SUSIL"."EMPLOYEE"
( "EMP_ID" VARCHAR2(6),
"EMP_NAME" VARCHAR2(40),
"DEPT_NO" NUMBER,
CONSTRAINT "E_PK" PRIMARY KEY ("EMP_ID")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 131072 NEXT 131072 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "USER_TS" ENABLE
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 131072 NEXT 131072 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "USER_TS"

=====================================================================

Comments

Popular posts from this blog

Design and Operations ( Employee- Model )

-- DB design drop table emp_Salary; drop table emp_Designation; drop table emp; drop table Designations; drop table Departments; drop table Salary_Bands; drop table Addresses; Create table emp( emp_id number, emp_Name varchar2(20), emp_address_id varchar2(10), emp_created_date date, emp_created_by varchar2(20), constraint e_pk primary key(emp_id) ); Create table Departments( dept_id number, dept_name Varchar2(20), constraints dept_pk primary key(dept_id) ); Create table Designations( dept_id number references Departments(dept_id), desg_id number, desg_description varchar2(20), constraints desg_pk primary key(dept_id,desg_id) ); Create table emp_Designation( emp_id number references emp(emp_id), emp_des_dept_id number references departments(dept_...

How to remove duplicate rows without using DISTINCT or ROWID or GROUP BY methods in Oracle?

Make use of SET operators and CTAS (Create Table AS) method.. Example: Create table tmp_tb1 as Select * from table1 intersect Select * from table1; truncate table table1; insert into table1 select * from tmp_tb1; -- This will now have removed all duplicates in the table... commit; *** You can use UNION operator in place of INTERSECT

Identify current and prev details of a customer

  create table customer_rating( id char, name char, irrating char, jcrrating char, procDate date, flag char ); insert into customer_rating values('A','D','X','Y','28-Jul-21','M'); insert into customer_rating values('A','D','M','L','27-Jul-21','M'); Select cr.id, cr.name, cr_prev.irrating pcob_rating, cr.irrating cob_rating, cr_prev.jcrrating pcob_jcr_rating, cr.jcrrating cob_jcr_rating From Customer_Rating cr join Customer_Rating cr_Prev  ON cr.procdate = '28-Jul-21' AND cr_prev.id = cr.id AND cr_prev.procdate = (  Select max(procdate) from Customer_Rating  Where id=cr.id and procdate < cr.procdate ) ;