Donnerstag, 4. Februar 2016

Update mit Rowid

update emp2 t2
   set t2.ename = 'Name'
 where 1 = 1
   and rowid = (select rowid
                  from emp2 t
                 where empno = 23);


Allerdings ist diese Art des Updates nicht sehr effizient.

https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:53140678334596
http://www.java2s.com/Tutorial/Oracle/0040__Query-Select/UnderstandingRowIdentifiersrowid.htm
http://psoug.org/definition/ROWID.htm
http://www.orafaq.com/wiki/ROWID

Variablen, Deklaration und Definition

-- *************************************************************
-- * allgemeine SELECT * INTO - Syntax
-- *************************************************************
select
  into
  from
 where ;
--
*************************************************************
-- * Deklaration des Typs
-- *
************************************************************
declare
  v_empno Number;
  v_ename Varchar2(50);
  v_job   Varchar2(50);
begin
  select empno, ename, job
    into v_empno, v_ename, v_job
    from emp
   where empno = 1
   ;
  --
  dbms_output.put_line (v_empno || ' | ' ||
                        v_ename || ' | ' ||
                        v_job);
end;
--
*************************************************************
-- * mit dem Typ einer Tabellenspalte
-- *************************************************************
declare
  -- Definitionen
  v_empno emp.empno%TYPE;
  v_ename emp.ename%TYPE;
  v_job   emp.job%TYPE;
begin
  select empno, ename, job
    into v_empno, v_ename, v_job
    from emp
   where empno = 8001
   ;
  --
  dbms_output.put_line (v_empno || ' | ' ||
                        v_ename || ' | ' ||
                        v_job);
end;
-- *************************************************************
-- * Record-Deklaration
-- *************************************************************
declare
  -- Define a record
  TYPE t_EmpRecord is RECORD (
    v_empno emp.empno%TYPE,
    v_ename emp.ename%TYPE,
    v_job   emp.job%TYPE);
  -- Declare a variable of type record
  v_Employee t_EmpRecord;
begin
  select e.empno, e.ename, e.job
    into v_Employee.v_empno, v_Employee.v_ename, v_Employee.v_job
    from emp e
   where e.empno = 8001
   ;
  --
  dbms_output.put_line (v_Employee.v_empno || ' | ' ||
                        v_Employee.v_ename || ' | ' ||
                        v_Employee.v_job);
end;