2014-04-05 3 views
1

테이블을 삭제하기 위해 SQL 문을 사용해야하는데 테이블이 존재하지 않으면 충돌이 발생합니다. 가능하면 프론트 엔드 코드에서이 일을하는 경우, 당신은테이블이 SQL 문에 존재하는 경우 oracle 데이터베이스에서 테이블 삭제

declare var_count int; 
select count(*) INTO var_count 
from all_tables where OWNER = [schema] and table_name = "EMPLOYEE"; 
if var_count > 0 then 
begin 
drop table employee; 
end 

다음과 같이 따라 적응을 할 수있는 올바른 권한이 가정 테이블 s.executeUpdate("DROP TABLE employee");

+2

PLSQL 블록에서이 작업을 수행하고 있습니까? – mason

답변

10

오라클은 분명히 MySQL을 (그리고 아마도 다른 RDBMS에) 법적 구문 인 구조와 같은 drop table if exists my_table를 지원하지 않습니다를 참조하십시오. 당신이 DROP 및/또는 CREATE 다양한 개체에 DDL를 실행하는 .SQL 스크립트에서

는 오라클 표준은 객체를 삭제하고 오브젝트가 존재하지 않는 경우 오류를 무시하는 것입니다. 원하는 경우 객체가 있는지 확인하기위한 코드를 작성할 수 있습니다 (DBA_OBJECTS보기 참조).

s.executeUpdate에서, 나는 당신이 자바에서 이것을하고 있다는 것을 모았습니까? 그것이 나라면, 나는 방금 드롭을하고 존재하지 않는 오류를 무시합니다.

희망이 있습니다.

2

에게 드롭 IF 문을 사용하는 것입니다 대신 pl/sql 프로 시저.

s.executeUpdate("DROP TABLE IF EXISTS employee") 

하지만 당신의 verions에 따라, 당신이 사용할 수 있습니다 :에서 가져온

IF OBJECT_ID('dbo.employee', 'U') IS NOT NULL 
DROP TABLE dbo.employee 

답변 :

-3

나는 다음과 같은 코드를 사용하는 것이가있을 수 있습니다처럼 here을,이 보인다 같은 게시물의 중복? SQL 설명서를 읽고 게시하기 전에 좀 더 많은 조사를 해보길 강력히 권해 드리고 싶습니다.하지만 새로운 것을 알기에는 StackOverFlow에서 게시 규칙을 읽어야합니다.

+1

질문은 SQL Server가 아닌 Oracle에 관한 것입니다. –

+0

"... 테이블이 SQL 문에있는 경우"나는 방금 질문 한 질문이 사용자가 배우고 싶은 것을 반영 할 것이라고 생각했습니다. –

0

전통적으로 pl/sql에서는 블록에 예외 섹션을 지정할 수 있으며 테이블이 없으면 예외를 catch 할 수 있습니다.

Oracle errors handling

0

테이블을 존재하지 않을 때 문제가 해결되면 오류가 발생하지 않습니다.

BEGIN DROP TABLE employee; 예외 그 외의 경우 NULL; END;

+0

구문이 유효한지 확인해야합니다. –

관련 문제