Tag: oracle


Oracle-ing Myself – Lesson 7 Özeti

April 1st, 2009 — 12:27pm
DROP TABLE emp2;
 
SELECT original_name,
     operation,
     droptime
FROM recyclebin;
 
flashback TABLE emp2 TO before DROP;
 
--external tables
--c:\deneme diye bir klasör olustur içine
--emp.dat diye dosya olustur virgülle ayrilmis
CREATE directory deneme AS 'C:\deneme';
 
GRANT READ WRITE ON directory deneme TO hr;
 
CREATE TABLE oldemp (fname char(25), lname char(25))
organization external (type oracle_loader DEFAULT directory deneme 
access parameters (
records delimited BY newline 
nobadfile 
nologfile 
FIELDS terminated BY ','
fname position (1:20) char,
lname position (22:41) char))
location ('emp.dat'))
parallel 5
reject LIMIT 200;
 
--type oracle_loader > sadece okuma islerinde kullaniyoruz
--type oracle_datapump > import export islerinde datapump kullancagiz
 
--meta data sorgulari
SELECT * FROM dictionary WHERE table_name LIKE '%TABLE%';
SELECT * FROM dict;
 
SELECT * FROM user_tables;
SELECT * FROM user_objects;
SELECT * FROM user_views;
SELECT * FROM user_tab_columns;
 
SELECT * FROM all_tables;
 
SELECT * FROM dba_tables;
 
--performansla ilgili meta data gelir
SELECT * FROM v$database;
SELECT * FROM v$instance;
 
SELECT * FROM user_tab_comments;
 
comment ON TABLE employees IS 'Employee information';
 
UPDATE dept
SET manager_id = DEFAULT
WHERE departmen_id=10;
 
INSERT ALL 
  INTO sal_history VALUES(empid,hiredate,sal)
  INTO mgr_history VALUES(empid,mgr,sal)
  SELECT employee_id empid, hire_date hiredatei salary sal, manager_id mgr
  FROM employees
  WHERE employee_id > 200;  
 
INSERT ALL 
  when hiredate < '01-JAN-95' THEN
    INTO emp_history VALUES(empid,hiredate,sal)      
  when comm IS NOT NULL then
    INTO emp_sales VALUES(empid,comm,sal) 
SELECT employee_id empid, hire_date hiredatei salary sal, commission_pct comm
FROM employees;  
 
INSERT first 
  when hiredate < '01-JAN-95' THEN
    INTO emp_history VALUES(empid,hiredate,sal)      
  else
    INTO emp_sales VALUES(empid,comm,sal) 
SELECT employee_id empid, hire_date hiredatei salary sal, commission_pct comm
FROM employees;
 
merge INTO emp a USING (employees) b
ON (a.employee_id == b.employee_id)
when matched then UPDATE SET
a.first_name = b.first_name,
a.last_name = b.last_name,
......
DELETE WHERE (b.commission_pct IS NOT NULL)
when NOT matched then
INSERT VALUES (b.employee_id,b.first_name,b.last_name....);
 
UPDATE emp3 SET salary = salary * 1.30
WHERE employee_id =107;
 
commit;
 
--salary alaninda yapilan degisiklikleri görebiliriz
SELECT salary FROM emp3
  version BETWEEN scn minvalue AND maxvalue
WHERE employee_id = 107;
 
--5 dakika öncesini göster
SELECT salary FROM emp3 AS of timestamp sysdate-5/1440
WHERE employee_id =100;
 
ALTER session SET time_zone = '-2:00';
 
ALTER system SET nls_date_format = 'DD-MON-YYYY HH24:MI:SS';
 
SELECT dbtimezone, sessiontimezone, current_date, 
          current_timestamp, localtimestamp 
FROM dual;
 
SELECT extract(year FROM sysdate) FROM dual;
 
SELECT tz_offset('US/Eastern') FROM dual;
 
SELECT from_tz(timestamp '2000-07-12 08:00:00','Australia/North') FROM dual;
 
SELECT to_timestamp('2000-07-12 08:00:00','YYYY-MM-DD HH:MI:SS') FROM dual;
 
SELECT hire_date, to_yminterval('01-02'), to_dsinterval('100 10:00:00')
FROM employees;
 
UPDATE employees e
SET department_name = (SELECT department_name 
  FROM departments d
  WHERE d.department_id == e.department_id);
 
SELECT employee_id, last_name
FROM employees e
ORDER BY (SELECT department_name 
          FROM departments d
          WHERE e.department_id = d.department_id);
 
SELECT employee_id, last_name
FROM employees OUTER
WHERE EXISTS (SELECT 'X'
              FROM employees
              WHERE manager_id = OUTER.employee_id);
 
SELECT employee_id, last_name
FROM employees OUTER
WHERE NOT EXISTS (SELECT 'X'
              FROM employees
              WHERE manager_id = OUTER.employee_id);
 
UPDATE emp3 e
SET department_name = (SELECT department_name
                        FROM departments d
                        WHERE e.department_id = d.department_id);
 
DELETE FROM emp3 e
WHERE employee_id = (SELECT employee_id
                      FROM emp_history
                      WHERE employee_id = e.employee_id);
 
 
WITH summary AS
  (SELECT d.department_name dname,
     SUM(e.salary) total_dep
   FROM departments d,
     employees e
   WHERE e.department_id = d.department_id GROUP BY d.department_name)
  SELECT dname,
  total_dep
FROM summary
WHERE total_dep >
  (SELECT SUM(total_dep) *1 / 8
   FROM summary)
ORDER BY total_dep DESC
  • Facebook
  • Twitter
  • StumbleUpon
  • del.icio.us
  • Digg

Comment » | Sql

Oracle-ing Myself – Lesson 6 Özeti

March 23rd, 2009 — 3:57am
CREATE VIEW vwsal AS
SELECT last_name lname,
     department_id deptid,
     salary sal
FROM employees
WHERE department_id = 50;
 
SELECT *
FROM vwsal;
 
UPDATE vwsal
SET sal = sal + 10;
 
CREATE OR REPLACE VIEW vwsal AS
SELECT last_name lname,
     department_id deptid,
     salary sal
FROM employees
WHERE department_id = 60;
 
CREATE OR REPLACE VIEW vwsal AS
SELECT last_name lname,
     department_id deptid,
     salary sal
FROM employees
WHERE department_id = 20 WITH CHECK OPTION;
--WITH CHECK OPTION where şartındaki kolonun değiştirlimemesini kontrol ediyo
 
CREATE OR REPLACE VIEW vwsal AS
SELECT last_name lname,
     department_id deptid,
     salary sal
FROM employees
WHERE department_id = 20 WITH READ ONLY;
--WITH READ ONLY sadece select için bir view
--raporlar genelde bu şekilde oluşturulur
 
 
DROP VIEW vwsal;
 
CREATE sequence dept_seq increment 
BY 10 START WITH 120 maxvalue 9999 nocache nocycle;
 
CREATE sequence dept_seq increment 
BY 10 START WITH 120 maxvalue 9999 cache 50 nocycle;
 
CREATE sequence seq;
 
INSERT
INTO departments
VALUES(seq.NEXTVAL,      'deneme',      100,      1000);
 
SELECT seq.currval
FROM dual;
 
 
CREATE synonym em FOR employees;
--tabloya nickname verdik
 
SELECT * FROM em;
 
 
CREATE INDEX dept_name ON dept(name);
 
 
SELECT * FROM dictionary;
SELECT * FROM dict;
 
 
--kullanıcı yaratmak
CREATE user serdar IDENTIFIED BY sr
 
 
--session hakkı vermek
GRANT CREATE session TO serdar;
 
 
--select hakkı vermek
GRANT SELECT ON hr.employees TO serdar;
 
 
--kendi şemasında tablo oluşturma hakkı
GRANT CREATE TABLE TO serdar;
 
--tüm şemalarda tablo oluşturma hakkı
GRANT CREATE any TABLE TO serdar;
 
--user kiilitlemek
ALTER user serdar account LOCK;
 
--user kilitlenmişse açmak
ALTER user serdar IDENTIFIED BY sr account UNLOCK;
 
 
GRANT CREATE session, CREATE TABLE, CREATE sequence, CREATE VIEW TO demo;
 
 
--rol yaratmak
CREATE role rol;
 
--role hak vermek
GRANT CREATE session, CREATE TABLE, CREATE sequence TO rol;
 
--user a rol vermek
GRANT rol TO serdar;
 
 
--sifre değiştirmek
ALTER user serdar IDENTIFIED BY '123';
 
 
--verdiğim yetkiyi dağıtabilir şekilde ver, with grant option
GRANT SELECT ON employees TO serdar WITH GRANT OPTION;
 
 
--herkese yetki ver, to public
GRANT SELECT ON alice.departments TO public
 
 
--hak almak
REVOKE SELECT,INSERT ON departments FROM serdar cascade constraints;
--casced daha önce bu haklardan dağıtmışsa onlarıda alır...
 
--kolon ekle
ALTER TABLE employees ADD(kolon varchar2(20));
 
--kolon değiştir
ALTER TABLE employees MODIFY(kolon varchar2(30));
 
--kolon sil
ALTER TABLE employees DROP(kolon);
 
--kolonu kullanılamaz yapmak
ALTER TABLE employees
SET unused(salary);
--çok data olan bir kolon drop edildiğinde 2-3 dakika sürebilir
--unused anında kolonu kullanılamaz yapar
--kolon datası hala arkaplanda duruyordur ama getirilemez
--ikinci adımda drop ederek arkaplandanda sileriz
 
--constraint eklemek
ALTER TABLE emp2
ADD constraint emp_mgr_fk
FOREIGN KEY(manager_id)
REFERENCES emp2(employee_id);
 
ALTER TABLE emp2 MODIFY employee_id PRIMARY KEY;
 
ALTER TABLE emp2 MODIFY employee_id PRIMARY KEY deferrable initially deferred;
 
ALTER session
SET constraints = immediate;
 
ALTER TABLE dept2
DROP PRIMARY KEY cascade;
 
ALTER TABLE emp2
disable constraint emp_dt_fk;
 
ALTER TABLE emp2
enable constraint emp_dt_fk;
 
ALTER TABLE emp2
DROP COLUMN employee_id cascade constraints;
 
ALTER TABLE emp2
RENAME COLUMN employee_id TO eid;
 
ALTER TABLE emp2
RENAME constraint mktg_pk TO newmktg_pk;
  • Facebook
  • Twitter
  • StumbleUpon
  • del.icio.us
  • Digg

Comment » | Sql

Oracle-ing Myself – Lesson 5 Özeti

March 22nd, 2009 — 12:06pm
commit;
 
INSERT
UPDATE
CREATE --create anında auto commit olur
DELETE
 
rollback; --create cümlesinin sonrasına dönebiliriz...
 
 
--for update, select ile gelen kolonları kilitliyor...
SELECT employee_id,
 salary,
 job_id
FROM employees
WHERE job_id = 'SA_REP'
FOR UPDATE
ORDER BY employee_id;
 
CREATE TABLE my_employee(
id NUMBER(4) NOT NULL,
last_name VARCHAR2(25),
first_name VARCHAR2(25),
userid VARCHAR2(8),
salary NUMBER(9,   2));
 
DESC my_employee;
 
INSERT INTO my_employee VALUES (1,'Patel','Ralph','rpatel',895);
 
INSERT INTO my_employee (id,last_name,first_name,userid,salary) VALUES
(2,'Dancs','Betty','bdancs',860);
 
INSERT INTO my_employee (id,last_name,first_name,userid,salary) VALUES
(&id,'&last_name','&first_name','&userid',&salary);
 
commit;
 
SELECT * FROM my_employee;
 
UPDATE my_employee
SET last_name ='Drexler'
WHERE id=3;
 
UPDATE my_employee
SET salary = 1000
WHERE salary<900;
 
SELECT * FROM my_employee;
 
DELETE FROM my_employee WHERE last_name='Dancs' AND first_name='Betty';
 
DELETE FROM my_employee
WHERE rowid='AAARW6AAEAAAAGPAAE';
 
commit;
 
savepoint A;
 
DELETE FROM my_employee;
 
rollback TO savepoint A;
 
commit;
 
INSERT INTO my_employee (id,last_name,first_name,userid,salary)
VALUES (&id,'&&last_name','&&first_name',lower(substr('&first_name',0,1))
|| lower(substr('&last_name',0,7)),&salary);
 
 
--number(3,2)  maximum 9.99 tutar
CREATE TABLE tbl(col1 NUMBER(3,   2) NOT NULL,   col2 VARCHAR2(20),
col3 DATE);
 
DESC tbl;
 
INSERT
INTO tbl
VALUES(1,   'Serdar',   sysdate);
 
SELECT *
FROM tbl;
 
CREATE TABLE tbl2(col1 NUMBER(3,   2) NOT NULL,   col2 VARCHAR2(20),
col3 DATE DEFAULT sysdate);
 
DESC tbl2;
 
INSERT
INTO tbl2 (col1,col2)
VALUES(1,   'Serdar');
 
SELECT * FROM tbl2;
 
 
-- data types
 
* varchar2              - değişken uzunluklu karakter tutmak içIN
* char                  - sabit uzunluklu DATA tutmak içIN 
(char varchar a göre çok yer tutar ama daha performanslıdır.)
* number                - sayı tutar
* date                  - tarif tutar
* long                  - değişken uzunluklu karakter DATA max 2gb
* clob                  - değişken uzunluklu karakter DATA max 4gb
* raw AND long raw      - raw BINARY DATA
* blob                  - BINARY DATA (max 4gb)
* bfile                 - BINARY DATA bir klasörde tutulur pathi alana yazılır.
 
* rowid                 - her bir satır içIN oluşturulan sıra numarasıdır. 
 
 
--constraints
 
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
 
--
 
ALTER TABLE emp5 READ only;
 
ALTER TABLE emp5 READ WRITE;
  • Facebook
  • Twitter
  • StumbleUpon
  • del.icio.us
  • Digg

Comment » | Sql

Back to top