Хранимая процедура Oracle с неопределенным числом параметров в Java JSF - PullRequest
0 голосов
/ 15 февраля 2012

У меня есть форма JSF с 15 флажками и кнопкой отправки.Я могу щелкнуть все или выбрать только несколько флажков, а затем отправить форму.

Используя функцию javascript, я получаю значения флажков, по которым щелкнул, и объединяю их в строку;например checkbox1=IC&checkbox2=S

Это значение отправляется в мой класс Java.Я хочу передать значения флажков в хранимой процедуре в Oracle.

Обратите внимание, что строка может содержать значения 1 флажок для всех 15 флажков.Хранимая процедура должна быть в состоянии справиться с количеством значений, которые я получаю.

Пример:

checkbox1=IC&checkbox2=S или checkbox1=IC&checkbox2=S&checkbox3=I&checkbox4=Sa&checkbox5=f&checkbox6=g&checkbox7=h&checkbox8=i&checkbox9=q&checkbox10=e&checkbox11=t&checkbox12=p&checkbox13=89&checkbox14=100&checkbox15=2012

ЛюбойИдея о том, как написать хранимую процедуру тоже?

Спасибо за ваше терпение и ответ.

1 Ответ

0 голосов
/ 15 февраля 2012

Вы можете объявить хранимую процедуру Oracle для принятия массива. Мне не сразу понятно, как именно вы хотите передать эту информацию хранимой процедуре (т.е. вам нужно передать имя флажка и соответствующее значение или вам просто нужно указать, что флажок N был отмечен). Простейший вариант схемы (хотя это может потребовать больше разбора хранимой процедуры) - передать массив строк, где каждый элемент массива был чем-то вроде checkbox1=IC, в хранимую процедуру.

CREATE OR REPLACE TYPE str_table
    IS TABLE OF varchar2(100);

CREATE OR REPLACE PROCEDURE process_checkboxes( p_checkboxes IN str_table )
AS
BEGIN
  FOR i IN 1 .. p_checkboxes.count
  LOOP
    <<do something with p_checkboxes(i)>>
  END LOOP;
END;

, который затем можно вызвать из Java с помощью чего-то подобного (адаптировано из этого потока AskTom )

import java.io.*;
import java.sql.*;
import oracle.sql.*;
import oracle.jdbc.driver.*;

public class ArrayDemo
{
   public static void passArray() throws SQLException
   {
       Connection conn = <<get your JDBC connection>>

       String checkboxStr = "checkbox1=IC&checkbox2=S";
       String strArray[] = checkboxStr.split("&");

       ArrayDescriptor descriptor =
         ArrayDescriptor.createDescriptor( "STR_TABLE", conn );

       ARRAY array_to_pass =
          new ARRAY( descriptor, conn, strArray);

       OraclePreparedStatement ps =
           (OraclePreparedStatement)conn.prepareStatement
           ( "begin process_checkboxes(:x); end;" );

       ps.setARRAY( 1, array_to_pass );

       ps.execute();   
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...