Oracle 40

표에서 MIN과 MAX를 모두 선택하는 속도가 예상보다 느립니다.

표에서 MIN과 MAX를 모두 선택하는 속도가 예상보다 느립니다. 이 .MYTABLE 열이 있는SDATE테이블의 기본 키이며 고유 인덱스가 있습니다. 이 쿼리를 실행할 때: SELECT MIN(SDATE) FROM MYTABLE 그것은 즉시 답을 줍니다.다음과 같은 경우에도 마찬가지입니다. SELECT MAX(SDATE) FROM MYTABLE 하지만 두 가지를 함께 조회하면, SELECT MIN(SDATE), MAX(SDATE) FROM MYTABLE 실행하는 데 훨씬 더 많은 시간이 걸립니다.계획을 분석해보니 최소 또는 최대 중 하나가 쿼리되면 INDEX FULL SCAN(MIN/MAX)을 사용하지만 둘 다 동시에 쿼리되면 FULL TABLE SCAN을 실행합니다. 왜요? 테스트 데이터: 전11g c..

programing 2023.06.28

한 열에 특정 값을 가질 수 있도록 데이터베이스 테이블을 제한하는 방법은 무엇입니까?

한 열에 특정 값을 가질 수 있도록 데이터베이스 테이블을 제한하는 방법은 무엇입니까? Oracle을 사용할 때 열 값이 'YES' 또는 'NO'일 수 있는 경우 한 행만 'YES' 값을 가질 수 있도록 테이블을 제한할 수 있습니까? 저는 차라리 테이블 구조를 다시 디자인하고 싶지만 이것은 불가능합니다. [UDPATE] 안타깝게도 이 테이블에는 null 값이 허용되지 않습니다.함수 기반 인덱스 사용: create unique index only_one_yes on mytable (case when col='YES' then 'YES' end); Oracle은 완전히 null이 아닌 키만 인덱싱하며, 여기서 CASE 식을 사용하면 모든 'NO' 값이 null로 변경되어 인덱싱되지 않습니다.이것은 엉성한 해킹..

programing 2023.06.23

cx_Oracle 및 예외 처리 - 모범 사례?

cx_Oracle 및 예외 처리 - 모범 사례? cx_Oracle을 사용하여 Oracle 인스턴스에 연결하고 몇 가지 DDL 문을 실행하려고 합니다. db = None try: db = cx_Oracle.connect('username', 'password', 'hostname:port/SERVICENAME') #print(db.version) except cx_Oracle.DatabaseError as e: error, = e.args if error.code == 1017: print('Please check your credentials.') # sys.exit()? else: print('Database connection error: %s'.format(e)) cursor = db.cursor(..

programing 2023.06.18

행 가져오기의 Oracle 크기를 더 높게 설정하면 앱 속도가 느려집니까?

행 가져오기의 Oracle 크기를 더 높게 설정하면 앱 속도가 느려집니까? 여기에서 자세히 설명하고 여기에서 확인한 대로 JDBC를 통해 데이터를 쿼리할 때 Oracle이 반환하는 기본 행 수는 10개입니다.저는 우리 데이터베이스에서 많은 데이터를 읽고 비교해야 하는 앱을 만들고 있습니다.만약 우리가 더 늘면defaultRowPrefetch1000 정도가 되면 우리 앱이 더 빨리 작동할 것입니다.결과적으로, 그것은 더 느리고 약 20% 정도 성능이 떨어졌습니다. 그리고 나서 우리는 그 숫자를 10개에서 천천히 늘리기로 결정했고 그것이 어떻게 작동하는지 보기로 했습니다.100에서 200 사이로 설정함으로써 약 10%의 증가를 보았습니다.하지만 더 높게 설정하면 앱 성능이 더 느려질 것이라고는 전혀 예상하지..

programing 2023.06.18

Oracle - 두 DateTime 열 간의 차이를 분 단위로 파악하는 데 가장 적합한 SELECT 문은 무엇입니까?

Oracle - 두 DateTime 열 간의 차이를 분 단위로 파악하는 데 가장 적합한 SELECT 문은 무엇입니까? 고객으로부터 다소 어려운 보고 요청을 받고 있는데, 두 개의 DateTime 열 간의 차이를 분 단위로 파악할 수 있는 방법을 찾아야 합니다.다양한 형식으로 잘라내기와 반올림을 사용하려고 시도했지만 의미 있는 조합을 찾을 수 없는 것 같습니다.이것을 하는 우아한 방법이 있습니까?그렇지 않다면, 이것을 할 수 있는 방법이 있습니까?SELECT date1 - date2 FROM some_table 일 단위로 차이를 반환합니다.시간의 차이를 얻으려면 24를 곱하고 분을 구하려면 24*60을 곱합니다.그렇게 SELECT (date1 - date2) * 24 * 60 difference_in_mi..

programing 2023.06.13

PL/SQL 저장 프로시저에서 쉼표로 구분된 문자열 분할

PL/SQL 저장 프로시저에서 쉼표로 구분된 문자열 분할 Oracle의 PL/SQL 저장 프로시저에 전달해야 하는 CSV 문자열 100.01,200.02,300.03이 있습니다.프로시저 내부에서 표의 숫자 열에 이 값을 삽입해야 합니다. 이를 위해 저는 여기에서 작업 방식을 얻었습니다. 오라클 9i에서 CSV 문자열을 가장 잘 분할하는 방법 [2) SQL의 수준별 연결 사용.] 자, 다른 요구사항이 있습니다.PL/SQL 저장 프로시저에 입력으로 CSV 문자열 2개를 전달해야 합니다.그리고 이 문자열을 끊고 두 CSV 문자열의 각 값을 표의 두 개의 다른 열에 삽입해야 합니다.어떻게 해야 하는지 알려주실 수 있나요? CSV 입력의 예: mystring varchar2(2000):='0.75, 0.64, 0..

programing 2023.06.08

Oracle SQL Developer에서 데이터베이스의 스키마 트리 목록을 보려면 어떻게 해야 합니까?

Oracle SQL Developer에서 데이터베이스의 스키마 트리 목록을 보려면 어떻게 해야 합니까? SQL Developer에서 데이터베이스에 속하는 스키마는 어떻게 표시합니까?Toad와 유사한 보기를 얻으려고 합니다.그럼 부모 수준에서 데이터베이스 이름이 있는 경우 그 아래의 모든 스키마를 확장하여 특정 스키마에 속하는 모든 개체를 표시할 수 있습니다.[ Other Users ]노드를 펼칩니다.2단계: 작성한 접속을 오른쪽 클릭합니다. [ Schema Browser ]옵션을 선택하여 드롭다운목록의 모든 스키마를 테이블과 함께 표시합니다. 언급URL : https://stackoverflow.com/questions/1272148/how-do-i-view-a-tree-list-of-schemas-fo..

programing 2023.04.04

같은 테이블의 여러 열에 대한 내부 결합 실행

같은 테이블의 여러 열에 대한 내부 결합 실행 제가 좀 빠져있는 시나리오가 있어요.색에 대한 설문조사를 하고 색 데이터를 위한 표와 사람들의 답변을 위한 표가 있다고 가정해 봅시다. tb컬러 color_code , color_name 1 , 'blue' 2 , 'green' 3 , 'yellow' 4 , 'red' Tbanswers answer_id , favorite_color , least_favorite_color , color_im_allergic_to 1 , 1 , 2 3 2 , 3 , 1 4 3 , 1 , 1 2 4 , 2 , 3 4 표시용으로 tbColors의 color_name 열을 사용하여 응답 테이블을 표시하는 SELECT를 작성하려고 합니다. FROM 섹션에서 tbColors를 3회 ..

programing 2023.03.15

LISTAGG 함수: "문자열 연결 결과가 너무 깁니다."

LISTAGG 함수: "문자열 연결 결과가 너무 깁니다." Oracle SQL 3.0.04입니다.는 이 하려고 했습니다.LISTAGG데이터를 그룹화합니다. CREATE TABLE FINAL_LOG AS SELECT SESSION_DT, C_IP, CS_USER_AGENT, listagg(WEB_LINK, ' ') WITHIN GROUP(ORDER BY C_IP, CS_USER_AGENT) "WEB_LINKS" FROM webviews GROUP BY C_IP, CS_USER_AGENT, SESSION_DT ORDER BY SESSION_DT 하지만 계속 오류가 발생하고 있습니다. SQL Error: ORA-01489: result of string concatenation is too long WEB_이..

programing 2023.03.05

BEGIN - PL/SQL에서 Atomic 트랜잭션을 종료합니다.

BEGIN - PL/SQL에서 Atomic 트랜잭션을 종료합니다. 이 정보는 찾기 쉬울 텐데, 저는 운이 없었어요. 내가 가지고 있을 때BEGIN - ENDPL/SQL의 블록은 원자성 트랜잭션으로 동작하며, 이 트랜잭션은 히트 시 커밋을 시도합니다.END차단하고 문제가 생기면 변경 사항을 롤백할 수 있습니까? 그렇지 않은 경우 BEGIN - END 블록 내의 코드가 아토믹 트랜잭션처럼 동작하도록 하려면 어떻게 해야 하며 블록은 어떻게 "기본값"으로 동작합니까? EDIT: 스토어드 프로시저에서 실행 중이며 암묵적인 블록을 사용하고 있습니다.일단은BEGIN..END통사적 요소일 뿐 트랜잭션과는 무관합니다. 둘째, Oracle에서는 모든 개별 DML 문이 원자성(즉, 첫 번째 장애 시 완전히 성공하거나 중간 ..

programing 2023.02.28