여기에 중첩 절차를 만들 필요가 없습니다. 한 번에 모든 작업을 수행 할 수 있습니다.
전혀 execute immediate
을 사용할 필요가 없습니다, 더 일반적으로 execute immediate
statement
create or replace procedure mytable (
Ptable_name in varchar2
, Pemp_name in varchar2
, Pemp_age in number
) is
begin
execute immediate 'create table ' || Ptable_name
|| ' (sname varchar2(20), sage number (4))';
execute immediate 'insert into ' || Ptable_name
|| ' values (:emp_name, :emp_age)'
using Pemp_name, Pemp_age;
end;
에서 바인드 변수의 내 사용을 참고; 즉석에서 테이블을 만드는 것은 잘못 설계된 데이터베이스를 나타냅니다. 가능하다면 이것을하지 마십시오. 당신이 그것을 필요로 할 경우, 사전에 테이블을 만들고 데이터를 삽입하는 간단한 방법이 있습니다
create or replace procedure mytable (
, Pemp_name in varchar2
, Pemp_age in number
) is
begin
insert into my_table
values (Pemp_name, Pemp_age);
end;
내가보기 엔 Guarding Against SQL Injection에 오라클의 장을 읽기 추천 할 것입니다.
당신이 정말 같을 것이다 중첩 된 절차로이 작업을 수행이 당신처럼 느끼는 경우; 중첩 된 프로 시저가 첫 번째 범위 외부에서 보이지 않으므로 주 메뉴에서 중첩 된 프로 시저를 호출하는 것을 잊지 마십시오.
create or replace procedure mytable ( Ptable_name in varchar2 , Pemp_name in varchar2 , Pemp_age in number ) is procedure myvalues ( Pemp_name in varchar2 , Pemp_age in number ) is begin execute immediate 'insert into ' || Ptable_name || ' values (:emp_name, :emp_age)' using Pemp_name, Pemp_age; end; begin execute immediate 'create table ' || Ptable_name || ' (sname varchar2(20), sage number (4))'; myvalues (Pemp_name, Pemp_age); end;
당신은 또한 어떻게 JDBC 코드에서 위의 프로 시저를 호출하면서 값을 입력하는 말해 줄 수 PL/SQL subprograms
출처
2013-07-23 07:19:39
Ben
에 오라클의 설명서를 참조하십시오. \t public String name; 공용 문자열 사용자 이름 public 정수 나이입니다. \t 공공 문자열) ( \t {\t \t \t \t \t 연결 콘을 실행; \t 성명 stmt; \t ResultSet rs; \t Class.forName ("oracle.jdbc.driver.OracleDriver"); \t con = DriverManager.getConnection ("jdbc : oracle : thin : @localhost : 1521 : XE", "Gaurav", "oracle"); stmt = con.createStatement(); CallableStatement cs = con.prepareCall (시작 mytable (....); 끝;); } – user2549572
죄송 합니다만 JDBC를 사용한 이래로 오랜 시간이 걸렸습니다. 지금은 테스트 할 항목이 없습니다 ... 매개 변수를 구문 분석하는 것과 관련하여 다른 질문이 있습니다. – Ben