Oracle для профессионалов




Передача данных - часть 7


104 105 public static void pass_num_array(oracle.sql.ARRAY p_in, 106 oracle.sql.ARRAY[] p_out) 107 throws SQLException 108 { 109 show_array_info(p_in); 110 java.math.BigDecimal[] values = (BigDecimal[])p_in.getArray(); 111 112 for(int i = 0; i < p_in.length(); i++) 113 System.out.println("p_in["+i+"] = " + values[i].toString()); 114 115 Connection conn = new OracleDriver().defaultConnection(); 116 ArrayDescriptor descriptor = 117 ArrayDescriptor.createDescriptor(p_in.getSQLTypeName(), conn); 118 119 p_out[0] = new ARRAY(descriptor, conn, values); 120 121 } 122 123 public static void 124 pass_date_array(oracle.sql.ARRAY p_in, oracle.sql.ARRAY[] p_out) 125 throws SQLException 126 { 127 show_array_info(p_in); 128 java.sql.Timestamp[] values = (Timestamp[])p_in.getArray(); 129 130 for(int i = 0; i < p_in.length(); i++) 131 System.out.println("p_in["+i+"] = " + values[i].toString()); 132 133 Connection conn = new OracleDriver().defaultConnection(); 134 ArrayDescriptor descriptor = 135 ArrayDescriptor.createDescriptor(p_in.getSQLTypeName(), conn); 136 137 p_out[0] = new ARRAY(descriptor, conn, values); 138 139 } 140 141 public static void 142 pass_str_array(oracle.sql.ARRAY p_in, oracle.sql.ARRAY[] p_out) 143 throws java.sql.SQLException,IOException 144 { 145 show_array_info(p_in); 146 String[] values = (String[])p_in.getArray(); 147 148 for(int i = 0; i < p_in.length(); i++) 149 System.out.println("p_in["+i+"] = " + values[i]); 150 151 Connection conn = new OracleDriver().defaultConnection(); 152 ArrayDescriptor descriptor = 153 ArrayDescriptor.createDescriptor(p_in.getSQLTypeName(), conn); 154 155 p_out[0] = new ARRAY(descriptor, conn, values); 156 157 }

Передача данных типа RAW ничем не отличается от передачи строк. С этим типом данных работать очень легко:

158 159 public static void pass(byte[] p_in, byte[][] p_out) 160 { 161 if (p_in != null) 162 p_out[0] = p_in; 163 }

Передача целых чисел — проблематична, я вообще не рекомендую их передавать. Нет способа передать значение NULL — соответствующий тип данных int относится к базовым типам данных языка Java. Эти данные не являются объектами и поэтому не могут быть неопределенными. Поскольку индикаторные переменные не поддерживаются, то при необходимости обработать неопределенные значения придется передавать отдельный параметр, а в PL/SQL-коде — проверять соответствующий флаг, чтобы определить, не возвращено ли неопределенное значение. Соответствующий метод представлен здесь для полноты, но лучше вообще не использовать данные целого типа, особенно как параметры, передаваемые в режиме




Содержание  Назад  Вперед