select mngbr, cifno, jikwonno, janamt , row_number() over(partition by jikwonno order by mngbr, cifno ) accum -- 직원별 순차번호 , sum(janamt) over(partition by jikwonno order by mngbr, cifno rows between unbounded preceding and current row) accum1 -- 점,직원별/ 고객번호순 잔액의 누적 , sum(janamt) over(partition by jikwonno) accum_tot -- 점,직원별 잔액의 합계 , round(ratio_to_report(janamt) over(partition by jikwonno), 2)*100 ratio_tot -- 점,직원별 잔액이 차지하는 비율 from table_123 where mngbr = 1100
3) 다시 사용하던 유져ID로 아래와 같이 private synonym을 생성합니다. CREATE SYNONYM all_arguments FOR sys.all_arguments_toad;
위와 같이 생성하면 정상적으로 작동합니다. 확인해본결과 TOAD 7버젼에서는 위에처럼 변경하지 않아도 정상으로 작동합니다.
Quest에서 패치를 받는법도 있다는데 다운받을수 없는분을 위해 알려드립니다. 국내에는 아직 잘 알려지지 않은버그인것 같습니다. ================================================================================================
SYNONYM 권한 생성 스크립트 SYS에서 실행 GRANT CREATE synonym TO 계정명;
SYNONYM 생성 스크립트 사용할 계정 로그인 후 실행 CREATE SYNONYM all_arguments FOR sys.all_arguments_toad;
CREATE OR REPLACE PROCEDURE PROC_CONVERT_TABLE ( P_USER_NAME IN VARCHAR2, P_TABLE_NAME IN VARCHAR2 ) IS tmpVar NUMBER; P_CO_NAME VARCHAR2(200); P_STR_SQL VARCHAR2(4000);
REVISIONS: Ver Date Author Description --------- ---------- --------------- ------------------------------------ 1.0 2009-06-18 1. Created this procedure.
NOTES:
Automatically available Auto Replace Keywords: Object Name: PROC_CONVERT_TABLE Sysdate: 2009-06-18 Date and Time: 2009-06-18, 오전 9:09:45, and 2009-06-18 오전 9:09:45 Username: (set in TOAD Options, Procedure Editor) Table Name: (set in the "New PL/SQL Object" dialog)
******************************************************************************/ CURSOR c1 IS select column_nm.column_name from user_tables, ( select table_name, column_name, data_type,data_length from All_tab_columns where owner = P_USER_NAME ) column_nm where user_tables.table_name = column_nm.table_name and user_tables.table_name like P_TABLE_NAME and column_name not in ('SMN', 'AY', 'FN');
BEGIN
OPEN c1; LOOP FETCH c1 INTO P_CO_NAME; EXIT WHEN c1%NOTFOUND;
BEGIN P_STR_SQL := 'INSERT INTO TEMP_2 ' || ' SELECT SMN, AY, FN, ' || '''' ||P_CO_NAME|| ''', ' || ' MAX(DECODE('||P_CO_NAME||', '||P_CO_NAME||', '||P_CO_NAME||')) ' || ' FROM TEMP ' || ' GROUP BY SMN, AY, FN ' || ' ORDER BY SMN'; EXECUTE IMMEDIATE P_STR_SQL; //쿼리를 동적으로 생성하여 처리할 수 있다. END; END LOOP; CLOSE c1;
tmpVar := 0; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN OTHERS THEN -- Consider logging the error and then re-raise RAISE; END PROC_CONVERT_TABLE;
/* 테이블 정보 가져오기 */ select table_name from user_tables where table_name like '[TABLE_NAME]';
/* 컬럼 정보 가져오기 */ select column_nm.* from user_tables, ( select table_name, column_name, data_type,data_length from All_tab_columns where owner = '[USER_NAME]' ) column_nm where user_tables.table_name = column_nm.table_name and user_tables.table_name like '[TABLE_NAME]'
insert into test values('','aa',''); insert into test values('','aa',''); insert into test values('','aa',''); insert into test values('','aa',''); insert into test values('','aa',''); insert into test values('','aa',''); insert into test values('','aa',''); insert into test values('','aa',''); insert into test values('','aa',''); insert into test values('','aa','');
insert into test values('','bb',''); insert into test values('','bb','');
select * from test
/* Formatted on 2009/05/18 20:15 (Formatter Plus v4.8.6) */ select r from ( SELECT ROWNUM r, tt.b FROM (SELECT b FROM TEST GROUP BY b) tt )
/* Formatted on 2009/05/18 20:03 (Formatter Plus v4.8.6) */ -- rowid 로 순번 UPDATE TEST t SET t.a = (SELECT r FROM (SELECT ROWNUM r, ROWID rd, a.* FROM TEST a) tt WHERE t.ROWID = tt.rd) WHERE t.ROWID = (SELECT rd FROM (SELECT ROWNUM r, ROWID rd, a.* FROM TEST a) tt WHERE t.ROWID = tt.rd)
-- rank 함수 사용 UPDATE TEST t SET t.a = (SELECT r FROM (SELECT rank() over(partition by a.b order by rownum) r, ROWID rd, a.* FROM TEST a) tt WHERE t.ROWID = tt.rd) WHERE t.ROWID = (SELECT rd FROM (SELECT ROWNUM r, ROWID rd, a.* FROM TEST a) tt WHERE t.ROWID = tt.rd)
SELECT rank() over(partition by a.b order by rownum) "rank", ROWID rd, a.a, a.b, rank() over(partition by a.b order by rownum) "rank" FROM TEST a GROUP BY rownum, rowid, a.a, a.b order by rownum
A B C 1 aa 2 aa 3 aa 4 aa 5 aa 6 aa 7 aa 8 aa 9 aa 10 aa 1 bb 2 bb
/* Formatted on 2009/05/18 14:06 (Formatter Plus v4.8.6) */ SELECT * FROM [테이블명] WHERE [컬럼명] BETWEEN TO_date ('2009-05-01 00:00:01', 'YYYY-MM-DD HH24:MI:SS') AND TO_date ('2009-05-18 23:59:59', 'YYYY-MM-DD HH24:MI:SS')
* 시스템 권한(System Privilege): 데이터 베이스를 액세스할 수 있다. * 객체 권한(Object Privilege) : 데이터 베이스 객체 내용을 조작할 수 있다. 1. System Privilege? --> DBA권한 - Create new users ( CREATE USER ) - Remove users ( DROP USER ) - Remove tables ( DROP ANY TABLE ) - Backup tables ( BACKUP ANY TABLE )
2. Creating User CREATE USER scott IDENTIFIED BY tiger ;
3. system privilege에서의 GRANT GRANT privilege [, privilege...] TO user [, user...] [WITH ADMIN OPTION] ; * WITH ADMIN OPTION : dba가 권한을 주는 user에게도 admin 권한을 줄 수 있다. * user system privilege(DBA 가 USER에게 할당 할 수 있는 권한) CREATE SESSION : 테이터베이스에 connect하는 권한 CREATE TABLE : 테이블 만드는 권한 CREATE SEQUENCE : sequence 만드는 권한 CREATE VIEW : view 만드는 권한 CREATE PROCEDURE : stored prcedure, function 만드는 권한 GRANT create table, create sequence, create view TO scott --> scott에게 table, sequence, view만드는 권한을 준다.
4. ROLE : 사용자에게 부여할 수 있는 관련 권한을 하나로 묶어 명명한 그룹 Grant를 줄 role user를 만든후 그 role user에 grant를 주고, role user의 권한을 각각의 user에게 넘겨준다. ① SQL> CREATE ROLE manager ; Role created. ② SQL> GRANT create table, create view TO manager ; Grant succeeded. ③ SQL> GRANT mananger TO brake, clock ; Grant succeeded.
5. User Password 변경하기 ALTER USER user IDENITIFIED BY password ; 예) ALTER USER scott IDENTIFIED BY lion ;
6. Object Privileges? * 객체마다 다르다. * 소유자는 객체에 대한 모든 권한을 갖는다. * 소유자는 자신의 객체에 대한 특정 권한을 부여할 수 있다. 7. Object Privilege에서의 GRANT GRANT object_priv [(columns)| ALL] ON object TO {user|role|PUBLIC} [WITH GRANT OPTION] ; * sue, rich 라는 user에게 emp 테이블을 select 권한을 준다. GRANT select ON emp TO sue, rich ; * scott, manager라는 user에게 dept 테이블의 dname,loc 컬럼을 update할 수 있게 권한을 준다. GRANT update (dname, loc) ON dept TO scott, manager ;
* WITH GRANT OPTION GRANT select, insert ON dept TO scott WITH GRANT OPTION ; --> scott에게 dept 테이블의 select, insert권한을 주면서 scott가 다른 유저에게도 이 권한을 줄 수 있게 한다.
* PUBLIC : 모든 유저에게 권한을 부여한다. GRANT select ON alice.dept TO PUBLIC ; --> 모든유저에게 alice가 만든 dept 테이블의 select권한을 준다.
* 모든 유저에게 모든 object권한을 주기 GRANT ALL ON emp TO PUBLIC ;
8. 권한 없애기 (REVOKE) REVOKE {privilege [, privilege...] | ALL} ON object FROM {user[, user...]|role|PUBLIC} [CASCADE CONSTRAINTS]
REVOKE select, insert ON dept FROM scott ; --> scott에게서 dept테이블의 select, insert권한을 없앤다. * CASCADE CONSTRAINTS : 이 옵션을 않쓰면 revoke할 때 forien key 관계의 table을 revoke할 수 없다.
9. Privilege Grant를 볼 수 있는 Data Dictionary ROLE_SYS_PRIVS : System privilege 권한에 대한 정보 ROLE_TAB_PRIVS : table(object) privilege 권한에 대한 정보 USER_ROLE_PRIVS : role정보 USER_TAB_PRIVS_MADE : 내가 다른 사람에게 준 TABLE 권한에 대한 정보 USER_TAB_PRIVS_RECD : 내가 다른 사람에게 받은 TABLE 권한에 대한 정보 USER_COL_PRIVS_MADE : 내가 다른 사람에게 준 COLUMN 권한에 대한 정보 USER_COL_PRIVS_RECD : 내가 다른 사람에게 준 COLUMN 권한에 대한 정보
::: 사람과 사람의 교감! 人터넷의 첫 시작! 댓글을 달아주세요! :::