2012-02-06 6 views
0

이 절차는 올바르게 작동하지 않습니다.tablename을 매개 변수로 전달하여 oracle의 저장 프로 시저를 사용하는 테이블에서 데이터 검색

create or replace procedure bank_search_sp 
(
p_tablename in varchar2, 
p_searchname in varchar2, 
p_bankcode out varchar2, 
p_bankname out varchar2, 
p_dist_code out number 
) 
as 
v_tem varchar2(5000); 
begin 
v_tem :='select bankcode,bankname,dist_code from ' || UPPER (p_tablename) || ' 
where bankname like '''|| p_searchname||''; 
execute immediate v_tem into p_bankcode,p_bankname,p_dist_code using p_searchname ; 
commit; 
end bank_search_sp; 

프로 시저가 만들어지고 있지만, 이것은

 
ORA-01756: quoted string not properly terminated 
ORA-06512: at "PENSIONS.BANK_SEARCH_SP", line 14 
ORA-06512: at line 1 

답변

3

후행 쉼표는이 라인에서 누락 표시되는 오류가 무엇인지 실제로 실행되었을 때 발생 몰라 :

v_tem :='select bankcode,bankname,dist_code from ' || UPPER (p_tablename) || ' 
where bankname like '''|| p_searchname||''''; 

문자열 조각의 끝에있는 4 개의 쉼표에 주목하십시오. 첫 번째는 문자열을 열고, 마지막은 문자열을 닫고, 가운데 두 개는 검색 표현식의 닫는 쉼표가 될 하나의 쉼표를 삽입합니다.

UPPER() 기능은 필요하지 않습니다. 오라클은 객체 이름의 대소 문자를 신경 쓰지 않습니다.

같은 구조의 여러 테이블을 갖는 것이 가장 좋은 방법인지 잘 모르겠습니다. 은행 간 차이를 나타내는 색인 된 열만있는 표를 갖는 것이 낫지 않습니까?