커뮤니티 정보

제목 SQL 명령어 모음-1
등록자 관리자 등록일 2006.06.13 09:06:36 접속 63676
1-1 DB정보 알기

--시스템에 생성된 테이블 보기
select * from sysobjects where type='U'

--버전알아내기
select @@version

--서비스 실행상태보기
net start -- 현재 시작되어 있는 서비스
net start mssqlserver
net start mssql$inst

net stop sqlagent



1-2 DBCC

-- 데이타베이스 용량 줄이기
dbcc shrinkdatabase(testdb,10)

-- 데이타베이스 파일 줄이기 10M로 줄이기
dbcc shrinkfile(testdb,10)

--테이블 검사
dbcc checktable

dbcc checkdb

--테이블, 색인의 조각비율
dbcc showcontig

--테이블 색인을 재작성 filefactor 20
dbcc dbreindex(test,'',20)

dbcc shwo_statistics

---지정한 시스템 테이블의 일관성과 테이블간의 일치하지 않는 내용 검사
dbcc checkcatalog test

--I/O량 확인
set statistics io on



1-3 로그백업

--로그백업
backup log pubs to pubslog

--로그를 그냥 비울때
backup log pubs with no_log
backup log pubs with truncate_only

--로그 점유율
dbcc sqlperf(logspace)



1-4 데이타베이스 백업

--백업
backup database pubs to disk='c:temppubs' with init

--복원
restore database pubs to disk='c:temppubs'



1-5 변수의 크기

bigint 8바이트 정수
int 4바이트 정수
smallint 2바이트 정수
tinyint 1바이트 정수
bit 0,1
float 부동소숫점(15자리)
real 부동소숫점(7자리)
datetime 8바이트 날짜시간
smalldatetime 4바이트 날짜시간
char, varchar 8000자이하
nchar,nvarchar 4000자 이하 유니코드
text 8000자 이상
Ntext 4000자 이상 유니코드
binary, varbinary 8000 바이트 이하 이진
image 8000 바이트 이상 그림
money 8바이트 화폐
smallmoney 4바이트 화폐
table 테이블자체
sql_variant text, ntext, image, timestamp 를 제외한 모든 자료형
cursor 커서
timestamp 유일한수



1-6 문자열 변형

convert(char(30), title) --30글자짜리 문자열로 변형
substring(title,1,30) -- 전체문장중 30글자만 표시하고 나머지는 공백으로 남겨둠
cast(title as char(30)) -- 문자열변경

replicate(0,5) --0을 5번 반복

select getdate()
--날짜
select convert(varchar(30), getdate(),111)
select convert(varchar(30), getdate(),112)
--시간
select convert(varchar(30), getdate(),108)

-- 앞자리 0으로 채우기
create function fn_FillStr
(
@No bigint,
@Length int,
@ReplaceChar char(1)
)
returns varchar(8000)
as
begin
return
(
replicate(@ReplaceChar, @Length - len(convert(varchar(20), @No))) + Convert(varchar(20), @No)
)
end
go
select dbo.fn_FillStr(123,6,'0')


--3자리마다 콤마찍기
create function fn_CommaFormat
(
@strNumber varchar(30),
@chrComma char(1)
)
returns varchar(50)
as
begin
if len(@strNumber) >3
set @strNumber = dbo.fn_CommaFormat(substring(@strNumber,1,len(@strNumber)-3),',') + @chrComma + Right(@strNumber,3)
return(@strNumber)
end
go
select dbo.fn_CommaFormat(12345678,',')
go



1-7 UNION 사용

UNION ALL -- 중복데이터도 모두 가져옴
UNION -- 중복데이터는 삭제



1-8 테이타입력

--새로운 테이블에 입력 : 색인이나 키는 복사하지 않는다.
select * into test2
from t1

-- 이미 존재하는 테이블에 테이터 입력
insert test2
select *
from test1



1-9 데이타베이스 의존성확인

sp_help test
sp_helpconstraint test
sp_depends test

sp_helpindex test

--모든 제약 중지
alter table test
nocheck constraint all

--모든 제약 시작
alter table test
check constraint all



1-10 동적쿼리

declare @sql varchar(255)
set @sql = 'select count(*) from '
set @sql = @sql + 'titles'

exec(@sql)



1-11 CASE

select ... ,
case whe sex=1 then '남' else '여' end as '성별'
from ...



1-12 동적테이블

declare @i int, @sql varchar(1000)
set @i=0
while @i < 30
begin
set @i = @i + 1
set @sql = 'create table a' + convert(varchar(3),@i) + ' ('
set @sql = @sql + 'id int)'
select @sql
exec (@sql)
end
go

select name from sysobjects where type='U' and like 'a%' order by name



1-13 테스트 테이타 입력

--테이블만들기
use tempdb
drop table test
go
create table test
(
id int indentity,
name char(80) default 'default name',
date smalldatetime default getdate()
)
create clustered index test_idx
on test(id)
go

--실행코드
set nocount on

declare @i smallint
set @i=0

while @i < 10000
begin
set @i=@i+1
insert test default values
end

set nocount off

select max(id() from test --결과확인



1-14 블로킹 모니터링

sp_who
sp_block
kill 51
dbcc inputbuffer (52)

-- 분산트랜젝션 처리를 하는 도중 오류가 발생하면 자동적으로 롤백처리
set xact_abort on




1-15 function

create function fn_test(@id varchar(4)) return table
as
return
(
select * from where id=@id
)

--사용
select * from dbo.fn_test('123')



1-16 전표번호 생성

--날짜와 번호로 생성
declare @OrderNum bigint
--select @OrderNum = max(OrderNum) from orders
set @OrderNum=2

if @OrderNum is null or @OrderNum = ''
set @OrderNum = substring(convert(char(8), getdate(),112),1,8) + '00001'
else
set @OrderNum = substring(convert(char(8), getdate(),112),1,8) +
right(replace(str(convert(int,right(@OrderNum,5))+1), ' ','0'),5)

select @OrderNum



2-1 테이블생성

create database test on primary
(
NAME = N'test_data',
FILENAME = N'c:temptest_Data.MDF',
SIZE=5,
MAXSIZE=100,
FILEGROWTH = 10%
)
log on
(
NAME = N'test_log',
FILENAME = N'c:temptest_Log.MDF',
SIZE=2,
FILEGROWTH = 1MB
)



2-2 identity()함수

select indentity(int,1,1) as Num, Name
into #test
from test



2-3 매월 첫날과 마지막날

declare @CurrDate datetime
set @CurrDate = getdate()
select
dateadd(dd, -1*day(@CurrDate)+1, @CurrDate) as 시작일,
dateadd(mm, 1, @CurrDate) - day(@CurrDate) as 마지막일



2-4 원격쿼리

select *
from openquery([killersql2000],'select * from pubs.dbo.sales')

select *
from [killersql2000].pubs.dbo.sales


========================================================
--DESC dept;
--SELECT * FROM emp;
--SELECT empno, ename, sal, sal*12 FROM emp;
--SELECT empno, ename, NVL(comm, 0) comm FROM emp; //null이 아니면 0으로 출력
--SELECT empno, ename, NVL(comm, 200) comm FROM emp; //null이 아니면 200으로 출력
--SELECT sal*12 "Annual Salary" FROM emp; //column alias
--SELECT empno||ename||hiredate FROM emp; //defalut형태의 character값으로 자동변환된후 연결
--SELECT 'Korea Fighting' FROM emp; //Korea Fighting이라는 literal이 전체row수만큼 출력됨
--SELECT 'Korea Fighting' FROM dual; //Korea Fighting이라는 literal이 1번만 출력됨
--SELECT sysdate, user FROM dual; //시스템의 현재시각이나 현재접속중인 사용자조회
--SELECT DISTINCT job FROM emp; //조회결과중 중복된 row들은 하나의 결과만 return
--SELECT ename, CASE deptno WHEN 10 THEN sal * 1.1
WHEN 20 THEN sal * 1.2
ELSE sal END new_sal
FROM emp; //10번과 20번부서는 각각 10%,20%인상,나머지 부서는 동결함
--SELECT ename, job FROM emp WHERE job <> 'PRESIDENT'; //Comparison Operator
--데이터 값에 대해 조건을 줄때는 현재 SESSION의 NLS_SESSION_FORMAT에 맞춰주도록한다
--SELECT value FROM nls_session_parameters WHERE parameter = 'NLS_DATE_FORMAT';
--ALTER SESSION SET nls_date_format = 'DD-MON-RR';
--SELECT empno, ename FROM emp WHERE hiredate >= '01-JAN-82';

--ALTER SESSION SET nls_date_format = 'RR/MM/DD';
--SELECT empno, ename FROM emp WHERE hiredate >= '82/01/01';
--SELECT dname, loc FROM dept WHERE loc IN('BOSTON', 'DALLAS');
//BOSTON이나DALLAS에 위치한부서, 반대의 경우는 NOT IN
--SELECT dname, loc FROM dept WHERE loc =ANY('BOSTON', 'DALLAS');//위와 동일한 결과
--SELECT ename, deptno FROM emp WHERE deptno <>ALL (30, 40);//30,40번부서에 속하지않은직원
--SELECT * FROM dept WHERE (deptno, loc) IN ((20,'DALLAS'),(30,'CHICAGO'));
//DOLLAS의 20번부서, 또는 CHICAGO의 30번부서를 출력
--SELECT ename FROM emp WHERE ename LIKE 'A%'; //이름이 A로 시작하는 직원출력
--SELECT dname, loc FROM dept WHERE dname LIKE '%X/_Y%' ESCAPE '/';
//부서명에 X_Y가 포함되어있는 부서를 출력
--SELECT ename, sal FROM emp ORDER BY sal DESC, ename;
//급여가 많은 사원부터 출력하되 급여가 같은경우 이름순서대로 출력
--SELECT ABS(45.925), ROUND(45.925), TRUNC(45.925), FLOOR(45.925),
CEIL(45.925), MOD(45.925,10), SIGN(-45.925) FROM dual; //Number Function
--SELECT CONCAT('Oracle','DBMS'), INITCAP('Oracle DBMS'),
LOWER('Oracle DBMS'), UPPER('Oracle DBMS') FROM dual; //Character Function1
--SELECT last_name, LTRIM(last_name, 'MA'), RTRIM(last_name, 'le')
FROM s_emp; //Character Function2
--SELECT CHR(79)||CHR(114)||CHR(97)||CHR(99)||CHR(108)||CHR(101) FROM dual;
//'Oracle'를 출력함
--SELECT TRANSLATE('Oracle DBMS', 'ABCD', '1234') FROM dual;
//'Oracle 42MS'를 출력함
--SELECT NEXT_DAY(sysdate, '일요일') FROM dual; // 03/09/28출력
--SELECT ROUND(TO_DATE('03/07/16'), 'YEAR') FROM dual; // 04/01/01출력
--SELECT ROUND(TO_DATE('03/07/16'), 'MONTH') FROM dual;// 03/08/01출력
--SELECT TRUNC(TO_DATE('03/07/16'), 'MONTH') FROM dual;// 03/07/01출력
--SELECT sysdate, start_date,sysdate - start_date FROM s_emp
WHERE last_name = 'Biri'; //성이 Biri인 사원의 근무일수 출력
--SELECT TO_CHAR(salary, '99,999'), TO_CHAR(salary, 'FM99,999') FROM s_emp;
// Formal Elements for Number -교재의 p3-14를 참조할 것
--SELECT TO_CHAR(sysdate, 'DAY DY') FROM dual; //출력값 - '목요일 목'
--SELECT TO_CHAR(start_date, 'FMMONTH"월"') FROM s_emp; //출력값 - 예)MARCH월
// Formal Elements for Date -교재의 p3-15,16,17를 참조할 것
--SELECT TO_CHAR(TO_DATE('80/01/01','YY/MM/DD'),'YYYY') FROM dual; //2080으로 출력됨
--SELECT TO_CHAR(TO_DATE('80/01/01','RR/MM/DD'),'YYYY') FROM dual;
//RR Format - 1980으로 출력됨
--SELECT value FROM NLS_SESSION_PARAMETERS
WHERE parameter = 'NLS_DATE_FORMAT' // 'RR/MM/DD'등으로 출력됨
--SELECT last_name, first_name, GREATEST(last_name, first_name) G_NAME,
LEAST(last_name, first_name) L_NAME FROM s_emp;
--SELECT VSIZE(last_name), VSIZE(start_date), VSIZE(salary) FROM s_emp;
//Miscellaneous Functions 실제사용하는 바이트수 리턴함
--SELECT NVL2(TO_CHAR(manager_id), 'Manager exists','No Manager') FROM s_emp;
--ALTER SESSION SET NLS_DATE_LANGUAGE= 'KOREAN';
--SELECT DECODE(TO_CHAR(TRUNC(sysdate,'MONTH'),'D'), 7, TRUNC(sysdate,'MONTH'),
NEXT_DAY(TRUNC(sysdate,'MONTH'), '토요일')) FIRST,
DECODE(TO_CHAR(TRUNC(sysdate,'MONTH'),'D'), 7, TRUNC(sysdate,'MONTH')+14,
NEXT_DAY(TRUNC(sysdate,'MONTH'), '토요일')+14) THIRD
FROM dual; //Nesting Single-Row Function
--SELECT * FROM s_dept d, s_emp e WHERE d.id = e.dept_id;
//Table Join & Table Alias
--SELECT * FROM emp, dept; //Cartesian Product
--SELECT o.id, o.date_ordered, i.quantity, p.name
FROM s_ord o, s_item i, s_product p
WHERE o.id = i.ord_id AND i.product_id = p.id AND p.name = 'Bunny Boot';
//Bunny Boot라는 제품에 대한 주문번호,주문날짜,수량을 출력함
--SELECT e.ename, e.job, e.sal, s.grade
FROM emp e, salgrade s
WHERE e.sal BETWEEN s.losal AND s.hisal; //Non-equijoin Join
--SELECT empno, dname
FROM emp e, dept d
WHERE e.deptno = d.deptno;
--SELECT empno, dname
FROM emp e, dept d
WHERE e.deptno(+) = d.deptno; //outer join
--SELECT empno, dname
FROM dept LEFT OUTER JOIN emp USING (deptno); //sql 1999 syntax,위와 동일
--INSERT INTO emp(empno, ename) VALUES(4444,user); // row INSERT함
--SELECT empno, dname
FROM emp e, dept d
WHERE e.deptno(+) = d.deptno(+); //outer join(쌍방향은 지정불가함)
--SELECT empno, dname
FROM dept FULL OUTER JOIN emp USING (deptno); //sql 1999 syntax,위와 동일하나 실행됨
--SELECT w.empno, w.ename, w.mgr, m.empno, m.ename, m.mgr
FROM emp w, emp m
WHERE w.mgr = m.empno; //Self Join
--SELECT count(*) FROM s_emp;
--SELECT count(empno) FROM emp;
--SELECT count(DISTINCT mgr) FROM emp;
--SELECT title, max(salary) FROM s_emp
GROUP BY title ORDER BY max(salary) DESC; //직종별 최고급여를 급여가 많은 직종부터 출력
--SELECT credit_rating, COUNT(*) "#Cust" FROM s_customer GROUP BY credit_rating; //신용등급별 고객의 수 출력
--SELECT region_id, COUNT(name)
FROM s_dept
GROUP BY region_id;
--SELECT title, AVG(salary) FROM s_emp
GROUP BY title HAVING COUNT(*) > 3; //사원이 3명이상인 직종에 대한 직종별 평균급여출력
--SELECT dept_id, title
FROM s_emp
GROUP BY dept_id, title
HAVING COUNT(*) > 1; //부서별로 2명이상 근무하고있는 직종 count는 dept_id, title에 모두 적용됨
--SELECT dept_id, title, sum(salary)
FROM s_emp
GROUP BY ROLLUP(dept_id, title);
--SELECT DECODE(GROUPING(dept_id), 1, 'All Depts', dept_id) AS dept_id,
DECODE(GROUPING(title), 1, 'All Titles', title) AS title,
SUM(salary) sumsal
FROM s_emp GROUP BY ROLLUP (dept_id, title); //ROLLUP연산후 발생된 SUBTOTAL값에 대한 TITLE설정
--SELECT dept_id, title, sum(salary)
FROM s_emp
GROUP BY CUBE(dept_id, title);
--SELECT DECODE(GROUPING(dept_id), 1, 'All Depts', dept_id) AS dept_id,
DECODE(GROUPING(title), 1, 'All Titles', title) AS title,
SUM(salary) sumsal
FROM s_emp GROUP BY CUBE (dept_id, title); //CUBE연산후 발생된 SUBTOTAL값에 대한 TITLE설정
--SELECT dept_id, title, sum(salary)
FROM s_emp
GROUP BY GROUPING SETS ((dept_id, title),(title),())
ORDER BY 1,2; //Grouping Set으로 작성
--SELECT dept_id, title, sum(salary)
FROM s_emp
GROUP BY dept_id, title
UNION ALL
SELECT NULL, title, sum(salary)
FROM s_emp
GROUP BY title
UNION ALL
SELECT NULL, NULL, sum(salary)
FROM s_emp; //위의 Grouping Set과 동일한 결과
--SELECT last_name, salary, dept_id
FROM s_emp
WHERE last_name IN (SELECT MIN(last_name)
FROM s_emp GROUP BY dept_id); //Single-Row Subquery
--SELECT dept_id, last_name, salary
FROM s_emp
WHERE (dept_id,salary) IN (SELECT dept_id, max(salary)
FROM s_emp GROUP BY dept_id); //Nested Subquery
--SELECT e.dept_id, e.id, e.last_name, e.salary
FROM s_emp e, (SELECT s.dept_id, max(s.salary) msal
FROM s_emp s GROUP BY dept_id) m
WHERE e.dept_id = m.dept_id AND e.salary = m.msal; //Inline View Subquery
--SELECT RPAD(' ',level*2, ' ')||last_name Employee
FROM s_emp
START WITH manager_id IS NULL
CONNECT BY PRIOR id = manager_id;
--SELECT RPAD(' ',level*2, ' ')||ename Employee
FROM emp
START WITH ename = 'ADAMS'
CONNECT BY empno = PRIOR mgr;

--CREATE TABLE cre_tab1 (db_user VARCHAR2(30) DEFAULT USER,
issue_date DATE DEFAULT SYSDATE,type_operation NUMBER(3));
//cre_tab1이란 이름의 table생성,리스트는 3개이중 이중2개는 default값을 가짐
//columnd의 datatype은 아래와 같다
NCHAR, NVARCHAR1,LONG,RAW,LONG RAW,BLOB,CLOB,NCLOB,ROWID,TIMESTAMP 등등..
--SELECT * FROM user_users;
--SELECT table_name FROM dictionary
WHERE table_name LIKE '%USER%'; //'DICTIONARY'view를 이용하여 적절한 Dictionary를 찾음
--SELECT constraint_name, constraint_type, search_condition, r_constraint_name
FROM user_constraints
WHERE table_name = 'S_EMP'; //Data Dictionary 조회
--CREATE TABLE test_con
(a NUMBER, b CHAR(2), c DATE NOT NULL,
CONSTRAINT test_con_pk PRIMARY KEY(a),
CONSTRAINT test_con_ck CHECK(b IN ('AA', 'BB'))); //CREATE TABLE
--INSERT INTO test_con VALUES(10, 'AA', sysdate); //INSERT
--INSERT INTO s_dept(id, name) VALUES(80, 'Branch'); //INSERT (Implicit Method)
--INSERT INTO s_dept VALUES(90, 'HQs', NULL); //INSERT (Explicit Method)
--INSERT INTO s_emp(id, last_name, userid, start_date)
VALUES(50, 'Bit', 'BIT', SYSDATE); //INSERT (USING Pseudocolumn)
--INSERT INTO s_emp(id, last_name, userid, start_date)
VALUES(60, 'Bit', USER, TO_DATE('2003, June, 23', 'YYYY, Month, DD'));
//INSERT (USING Pseudocolumn)
--CREATE TABLE test AS SELECT * FROM s_emp; //Subquery를 이용하여 table 생성
--INSERT INTO test SELECT * FROM s_emp; //Subquery를 이용하여 data 입력
--CREATE TABLE s_dept_h (id, name, rid)
AS SELECT id, name, rowid FROM s_dept WHERE 1 = 0;
--INSERT INTO s_dept_h
SELECT id, name, rowid FROM s_dept WHERE id < 30; //Subquery를 이용하여 data 입력
--UPDATE test SET commission_pct = 10; //WHERE절이 생략되면 해당TABLE의 모든ROW를 변경
--SELECT column_name, data_default FROM user_tab_columns
WHERE table_name = 'DEF_TAB'; //Oracle에서 제공하는 attribute query
--UPDATE (SELECT * FROM emp WHERE deptno = 10)
SET sal = sal * 1.1; //Subquery를 이용한 Update실행- UPDATE절
--UPDATE upt_emp d SET sal = (SELECT MAX(salary) FROM s_emp
WHERE dept_id = d.did); //Subquery를 이용한 Update실행- SET절
--CREATE TABLE s_emp_h(id, last_name, salary, before_upt_date, last_upt_date)
AS SELECT id, last_name, salary, sysdate, sysdate FROM s_emp WHERE 1=0;
--MERGE INTO s_emp_h h USING s_emp e ON (e.id = h.id)
WHEN MATCHED THEN
UPDATE SET h.salary = e.salary, before_upt_date = last_upt_date,
last_upt_date = sysdate
WHEN NOT MATCHED THEN
INSERT VALUES (e.id, e.last_name, e.salary, sysdate, sysdate);
//MERGE는 UPDATE와 INSERT를 결합한 문장이다
--DELETE FROM dept WHERE deptno = 10; //DELETE
//Returnning Clase -------start------//
--VARIABLE a NUMBER
--VARIABLE b CHAR
--VARIABLE c NUMBER
--VARIABLE d CHAR
--INSERT INTO s_dept VALUES (100, 'X', 2)
RETURNING rowid,id, name, region_id INTO :d, :a, :b, :c;
--PRINT a;

--CREATE TABLE Times
(ts1 timestamp,
ts2 timestamp with time zone,
ts3 timestamp with local time zone,
ts4 date); //Date Time Data Types
--INSERT INTO Times VALUES(sysdate, sysdate, sysdate, sysdate);
--CREATE TABLE time_tab
(a TIMESTAMP,b INTERVAL YEAR TO MONTH,c INTERVAL DAY TO SECOND);
//Date Time Data Types
--ALTER SESSION SET TIME_ZONE = 'Europe/London';
//자세한 Date Time Function은 9-22를 참고할 것
--ALTER TABLE alter1 ADD c DATE defalult sysdate; //Column을 추가삭제하는 내용
--ALTER TABLE alter1 SET UNUSED(c);
--ALTER TABLE alter1 DROP UNUSED COLUMNS;
--DROP TABLE cons1 CASCADE CONTSTRAINTS; // F.K 에 의해 참조되는 테이블의 삭제
--RENAME alter1 TO alter2; // 테이블이름변경 - 기존재시는 에러발생
--TRUNCATE TABLE alter2; // ROLLBACK불가능하며 DATA는 영구히 손실
--COMMENT ON TABLE s_emp IS 'This table is for employee information'; //TABLE주석
--COMMENT ON COLUMN s_emp.last_name IS 'Employee Last Name'; //COLUMN주석

--@D:ORACLEORA90RDBMSADMINUTLEXCPT.SQL //Exceptions스크립트파일작성
--ALTER TABLE DEPT ENABLE PRIMARY KEY EXCEPTIONS INTO EXCEPTIONS;
--SELECT * FROM EXCEPTIONS;
--DELETE DEPT WHERE ROWID = 'AAAH12AABAAAO+BAAA';
--ALTER TABLE DEPT ENABLE PRIMARY KEY;
--ALTER TABLE EMP ENABLE CONSTRAINT FK_DEPTNO;
--SELECT CONSTRAINT_NAME, CONSTRAINT-TYPE, TABLE_NAME, STATUS
FROM user_constraints
WHERE table_name in('EMP', 'DEPT');

--CREATE VIEW v_sales_rep
AS SELECT id, last_name, dept_id FROM s_emp
WHERE title = 'Sales Representative'; //Create View
--BREAK ON last_name ON dept_id; //Last_name,dept_id의 중복값을 제거
--CREATE UNIQUE INDEX s_emp_i_id_ind ON s_emp_i(id); //UNIQUE INDEX생성
--CREATE INDEX s_emp_i_last_name_dept_id_ind
ON s_emp_i(dept_id,last_name); //COMPOSITE INDEX생성
--CREATE INDEX s_emp_i_last_name_ind
ON s_emp_i UPPER(last_name); //FUNCTION-BASED INDEX생성
--DROP INDEX s_emp_i_last_name_ind; // DROP INDEX
--CREATE SEQUENCE s1; //Using Sequence
--SELECT SEQUENCE_NAME, MIN_VALUE, MAX_VALUE, INCREMENT_BY,
LAST_NUMBER
FROM USER_SEQUENCES
WHERE SEQUENCE_NAME = 'S1' //Dictionary of Sequence
--GRANT create session TO user70; //CREATE SESSION권한부여


@@@@@@@@@@@@@@ PL/SQL Program @@@@@@@@@@@@@@@@@@
=====================================================
--SET SERVEROUTPUT ON ==> DBMS_OUTPUT에 대한 화면출력을 지정함

1.SQL>EDIT anony
2.메모장에 아래와 같이 작성

ACCEPT p_sal PROMPT 'Enter the salary:'
VARIABLE g_annual_sal NUMBER
DECLARE
v_sal NUMBER := &p_sal;
BEGIN
:g_annual_sal := &p_sal * 12;
END;
/
PRINT g_annual_sal
3.SQL>@anony


1.SQL>EDIT p1;
2.p1.sql에 아래와 같이 프로그램작성
CREATE OR REPLACE PROCEDURE change_salary
(p_id IN NUMBER, p_new_sal IN NUMBER)
IS
BEGIN
UPDATE s_emp
SET salary = p_new_sal
WHERE id = p_id;
COMMIT;
END change_salary;
/
3.SQL>@p1 ==> 단지 compile만 수행함
4.SQL>EXEC change_salary(1,5000); ==>실제수행


1.SQL>EDIT f1
2.f1.sql에 아래와 같이 프로그램작성
CREATE OR REPLACE FUNCTION get_salary
(p_id IN NUMBER)
RETURN NUMBER
IS
v_sal NUMBER;
BEGIN
SELECT salary
INTO v_sal
FROM s_emp
WHERE id = p_id;
RETURN v_sal;
END get_salary;
/
3.SQL>@f1
4.SQL>VARIABLE g_sal NUMBER
5.SQL>EXEC :g_sal := get_salary(1);
6.SQL>PRINT g_sal


... 자료없음 ...