When the following error occurs like this

"oracle input pattern or replacement parameters exceed 32K size limit ... CLOB ..."

 

CREATE OR REPLACE FUNCTION REPLACE_CLOB( p_origin                          IN CLOB
                                	, p_search_text                     IN VARCHAR2
                                	, p_replace                         IN CLOB
) 
RETURN CLOB 
IS
    l_pos pls_integer;
    out_replace_clob CLOB := p_origin;
BEGIN
    l_pos := instr(p_origin, p_search_text);

    IF l_pos > 0 THEN
        WHILE l_pos > 0 LOOP
            out_replace_clob := substr(out_replace_clob, 1, l_pos-1)
            || p_replace
            || substr(out_replace_clob, l_pos + LENGTH(p_search_text));

            l_pos := instr(out_replace_clob, p_search_text);
        END LOOP;
        RETURN out_replace_clob;
    END IF;

    RETURN p_origin;
END REPLACE_CLOB;

-- v_huge_sql := REPLACE_CLOB(v_huge_sql, '[[REPLACE_LOCATION_IN_QUERY]]'    , v_huge_replace_text);

 

be the happy Gosu.

woojja ))*

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

반응형
LIST
Posted by woojja

댓글을 달아 주세요

The maximum number of columns allowed in a table of ORACLE are 1000.

(in 8i, 9i, 10g, 11g, 12c, 18c and 19c)

(ORACLE 7 had 254 columns limit.)

 

be the happy Gosu.

woojja ))*

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

반응형
LIST
Posted by woojja

댓글을 달아 주세요


-- 계정 : TEST_ACT, TEST_ACT2, TEST_ACT3, TEST_ACT4, TEST_ACT5

DROP TABLE TEST_ACT.TEST_TABLE;
CREATE TABLE TEST_ACT.TEST_TABLE
(
  COLUMN1 VARCHAR2(20) NOT NULL,
  COLUMN2 VARCHAR2(20) NOT NULL,
  COLUMN3  VARCHAR2(40) NOT NULL,
  CREATE_DATE DATE DEFAULT SYSDATE NOT NULL,
  CREATE_USER_ID  VARCHAR2(40) DEFAULT 'woojja' NOT NULL,
  UPDATE_DATE     DATE DEFAULT SYSDATE NOT NULL,
  UPDATE_USER_ID  VARCHAR2(40) DEFAULT 'woojja' NOT NULL
)
TABLESPACE TBL_SPC
  PCTFREE 10
  INITRANS 1
  MAXTRANS 255
  STORAGE
  (
    INITIAL 64K
    NEXT 1M
    MINEXTENTS 1
    MAXEXTENTS UNLIMITED
  );
  
COMMENT ON TABLE TEST_ACT.TEST_TABLE
  IS 'Test Table';
COMMENT ON COLUMN TEST_ACT.TEST_TABLE.COLUMN1
  IS 'COLUMN1';
COMMENT ON COLUMN TEST_ACT.TEST_TABLE.COLUMN2
  IS 'COLUMN2';
COMMENT ON COLUMN TEST_ACT.TEST_TABLE.COLUMN3
  IS 'COLUMN3';
COMMENT ON COLUMN TEST_ACT.TEST_TABLE.CREATE_DATE
  IS '생성일자';
COMMENT ON COLUMN TEST_ACT.TEST_TABLE.CREATE_USER_ID
  IS '생성자아이디';
COMMENT ON COLUMN TEST_ACT.TEST_TABLE.UPDATE_DATE
  IS '수정일자';
COMMENT ON COLUMN TEST_ACT.TEST_TABLE.UPDATE_USER_ID
  IS '수정자아이디';
  
ALTER TABLE TEST_ACT.TEST_TABLE
  ADD CONSTRAINT TEST_TABLE_PK PRIMARY KEY (DIVISION_CODE, PRODUCT_FAMILY_CODE, PROJECT_CODE, NPI, PRODUCTION_SITE_CODE, COMPONENT_CODE)
  USING INDEX 
  TABLESPACE TEST_SPACE
  PCTFREE 10
  INITRANS 2
  MAXTRANS 255
  STORAGE
  (
    INITIAL 64K
    NEXT 1M
    MINEXTENTS 1
    MAXEXTENTS UNLIMITED
  );

GRANT SELECT ON TEST_ACT.TEST_TABLE TO TEST_ACT2;

=>
GRANT SELECT, INSERT, UPDATE, DELETE ON TEST_ACT.TEST_TABLE TO TEST_ACT2 WITH GRANT OPTION;

GRANT SELECT, INSERT, UPDATE, DELETE ON TEST_ACT.TEST_TABLE TO TEST_ACT3;
GRANT SELECT, INSERT, UPDATE, DELETE ON TEST_ACT.TEST_TABLE TO TEST_ACT4;
GRANT SELECT ON TEST_ACT.TEST_TABLE TO TEST_ACT5;  



-- TEST_ACT2 에서 실행
DROP SYNONYM  TEST_TABLE;
CREATE SYNONYM TEST_TABLE FOR TEST_ACT.TEST_TABLE;

반응형
LIST
Posted by woojja

댓글을 달아 주세요

저번 야간에 작업을 하다 오라클 테이블 Lock 이 걸리는 사태가 발생했습니다.
Lock 이 걸려서 아무런 작업을 할 수가 없었죠...
DB Tool 로 Lock 을 풀어도 봤지만 단순한 방법으로는 Lock을 푼다고 해도 짧은 시간안에 바로 풀리지 않습니다. 저번 삼성 프로젝트할 때도 그런 경험이 있었지요.
Lock 해제하기위해 Admin 에게 요청을 해제 요청을 하면 다음날이 되서야 답변이오고(그때는 이미 Admin 이 작업하지 않아도 풀리고 나서죠.) 그래서 차라리 기다리는게 방법이다 하여 작업하다 퇴근한 적도 있습니다.
저번 작업은 조금 바쁜 작업이라 저희 회사 터프가이에게 헬프를 날렸죠...

친구들과 유흥을 즐기다 제 전화에 바로 겜방으로 달려가주시는 쎈쓰... 이런 쎈쓰쟁이...^^

3~40분을 전화통화를 하며 게임방에 VPN 프로그램을 깔고 접속하여 Lock리스트를 보는 찰라...
처음 조회때에는 보였는데 두번째 조회때에 사라졌습니다.

한마디로 Lock 이 자연적으루다가 시간이 지나서 풀려버린거죠...

대략이 난감이었습니다. ㅡㅡ'


그때 요럴땐 요로케 하셔요~ 하며 알려준 팁입니다. - 정말 쎈쓰쟁이... ^^

하지만 보시는 분들께 당부하고 싶은 한마디...
잘 사용하십시요...
아래 쿼리에 대한 결과에 대해 저나 우리의 쎈쓰쟁이는 책임지지 않습니다.
한마디로 위험하다는 말씀...

========================================================================

Lock 해제 관련 query 보내드립니다.

 

1) 쿼리를 실행한 프로그램을 알고 있다면 프로그램 명으로 해당 세션의 adress 알아냅니다.

select paddr from v$session where program like '%program name' ex) '%DOAD%'

 

2) 찾아낸 세션의 Adress 정보를 바탕으로 프로세스 ID(SID) 찾습니다.

select * from v$process where addr='C00000018880FD58';

 

위에서 찾아낸 SID 프로세스에서 Kill합니다, , 해당 프로세의가 리모트 프로세스이어야만 합니다. (local = no)

 

3) ps -ef | grep 2)sid

 

 

kill -9 2)SID

 

주의)

2)에서 반드시 local = No 프로세스 이어야 합니다.

DB shutdown되는 경우가 생길 있습니다.

============================================================

행복한 고수되십시요...


woojja ))*
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
반응형
LIST
Posted by woojja

댓글을 달아 주세요

일정 기간내의 날짜 구하는 쿼리 입니다.

database.sarang.net 에서 발췌했습니다.


SELECT TO_CHAR(dt,'yyyymmdd') "일자"
     , TO_CHAR(dt,'day') "요일"
     , DENSE_RANK() OVER(ORDER BY TRUNC(dt,'d'))||'주차' "주차"
  FROM (SELECT TO_DATE(sdt,'yyyymmdd') + LEVEL - 1 dt
          FROM (SELECT '20081221' sdt, '20090107' edt FROM dual)
               CONNECT BY LEVEL <= TO_DATE(edt,'yyyymmdd')
                                 - TO_DATE(sdt,'yyyymmdd') + 1
        )

모두 행복한 고수되시길...


woojja ))*
\\\\\\\\\\\\\\\\\\
반응형
LIST
Posted by woojja

댓글을 달아 주세요

이전버튼 1 이전버튼
반응형