Friday, July 4, 2025

SQL and PL/SQL Query for the interview - 02 July 2025 - 8

 select * from emp order by deptno, sal desc;


--Maximum Salary

select max(sal) from emp;


--3rd highest salary

select ename, sal, rank from (

select ename, sal, dense_rank() over(order by sal desc) as rank from emp)

where rank=3;


--more than avg of their own demartment


select * from emp e1, 

(select deptno, avg(sal) as avg from emp group by deptno) e2 where e1.deptno=e2.deptno and e1.sal>e2.avg;


--can we user case in where condition

SELECT *

FROM emp

WHERE

  CASE 

    WHEN job = 'MANAGER' THEN 1

    WHEN sal > 100000 THEN 2

    ELSE 0

  END = 2;

  

--Can we use decode in where condition

SELECT *

FROM emp

WHERE DECODE(deptno, 10, 'Y', 20, 'P', 'N') in ('P','N');


--Identify the Slow SQLs

SELECT *

FROM (

  SELECT sql_id, executions, elapsed_time,executions avg_time, sql_text

  FROM v$sql

  WHERE elapsed_time

  /*executions*/ IS NOT NULL

  ORDER BY avg_time DESC

)

WHERE ROWNUM <= 10;


--Check if the Package is Still Running or Hung

SELECT s.sid, s.serial#, s.username, s.status, s.sql_id, s.event, s.wait_class, s.seconds_in_wait

FROM v$session s

WHERE s.username = 'ODI_SRC'

  AND s.status = 'ACTIVE';


--Check for Locks or Blocking Sessions

SELECT

    a.sid blocker_sid,

    b.sid blocked_sid,

    a.username blocker_user,

    b.username blocked_user,

    b.event

FROM v$session a, v$session b

WHERE a.sid IN (SELECT blocking_session FROM v$session WHERE blocking_session IS NOT NULL)

  AND b.blocking_session = a.sid;


--Check for Recent SQL/PLSQL Errors

SELECT *

FROM dba_errors

WHERE name = 'GET_EMP'

  AND owner = 'ODI_SRC';


--Check System Resource Usage

SELECT * FROM v$resource_limit

WHERE resource_name IN ('sessions', 'processes');


--Or

SELECT * FROM v$sysmetric_summary

WHERE metric_name LIKE '%CPU%' OR metric_name LIKE '%Memory%';


--Example: Materialized View

CREATE MATERIALIZED VIEW emp_mv

BUILD IMMEDIATE

REFRESH FAST ON COMMIT

AS

SELECT deptno, COUNT(*) emp_count

FROM emp

GROUP BY deptno;


--How to Check If a View Is Updatable?

SELECT view_name, updatable

FROM user_updatable_columns

WHERE view_name = 'EMP_VIEW';


--Index may be missing or not used due to function or implicit conversion

create index ixd_hiredate on emp(hiredate);


explain plan for

select * from emp where to_char(HIREDATE)='23-12-80';


select * from table(dbms_xplan.display);


--Declared a procedure in the package body and it is not declared in the package specification. Will that package run or not?

CREATE OR REPLACE PACKAGE my_pkg AS

  PROCEDURE proc_pub;

END my_pkg;



CREATE OR REPLACE PACKAGE BODY my_pkg AS


  -- Public procedure (declared in spec)

  PROCEDURE proc_pub IS

  BEGIN

    proc_priv; -- calling private proc

    DBMS_OUTPUT.PUT_LINE('Public procedure');

  END;


  -- Private procedure (not in spec)

  PROCEDURE proc_priv IS

  BEGIN

    DBMS_OUTPUT.PUT_LINE('Private procedure');

  END;


END my_pkg;


EXEC my_pkg.proc_pub;



drop PACKAGE my_pkg;


drop PACKAGE BODY my_pkg;


set serveroutput on;


--3rd highest salary

SELECT sal

FROM (

  SELECT DISTINCT sal

  FROM emp

  ORDER BY sal DESC

)

WHERE ROWNUM =3;


--get employees whose salary is more than the average salary of their own department:

SELECT empno, ename, deptno, sal

FROM emp e

WHERE sal > (

  SELECT AVG(sal)

  FROM emp

  WHERE deptno = e.deptno

);


--mutating table error

CREATE OR REPLACE TRIGGER trg_emp_update

AFTER UPDATE ON emp

--for each row -it cause mutating table error

declare

v_count number;

BEGIN

  -- Valid: statement-level can query emp

  select count(*) into v_count from emp;

  dbms_output.put_line(v_count);

  --INSERT INTO log_table SELECT * FROM emp WHERE deptno = 10;

END;


select * from emp;


update emp set sal=250000 where empno=8376;

No comments:

Post a Comment

ODI Interview Question and Answers 29 September 2025

  Q: What is the basic difference between ETL and ELT approach? A: ETL extracts and transforms data outside the DB before loading, while E...