В наши дни строковый метод repeat
реализован почти повсеместно. (Это не в Internet Explorer .) Поэтому, если вам не требуется поддержка старых браузеров, вы можете просто написать:
"a".repeat(10)
До repeat
мы использовали этот хак:
Array(11).join("a") // create string with 10 a's: "aaaaaaaaaa"
(Обратите внимание, что массив длины 11 дает вам только 10 «а» с, поскольку Array.join
помещает аргумент между элементами массива.)
Саймон также указывает на то, что согласно этого jsperf , кажется, что в Safari и Chrome быстрее (но не в Firefox) повторять символ несколько раз, просто добавляя его с помощью цикла for (хотя и немного менее лаконично).
Вы можете попробовать использовать анонимный блок PL / SQL в CallableStatement
:
String constantValue;
CallableStatement statement = connection.prepareCall("BEGIN ? := Package1.A_CONSTANT; END;");
try {
statement.registerOutParameter(1, Types.VARCHAR);
statement.execute();
constantValue = statement.getString(1);
} finally {
statement.close();
}
Вы не можете этого сделать. Вам понадобится функция "геттер", чтобы вернуть значение общедоступной переменной или константы, определенной в пакете:
CREATE OR REPLACE PACKAGE Package1 IS
A_CONSTANT CONSTANT VARCHAR2(100) := 'Constant value a';
B_CONSTANT CONSTANT VARCHAR2(100) := 'Constant value b';
FUNCTION get_const(p_id NUMBER) RETURN VARCHAR2;
END Package1;
CREATE OR REPLACE PACKAGE BODY Package1 IS
FUNCTION get_const(p_id NUMBER) RETURN VARCHAR2
IS
BEGIN
IF p_id = 1 THEN
RETURN package1.a_constant;
ELSIF p_id = 2 THEN
RETURN package1.b_constant;
END IF;
RETURN NULL;
END;
END Package1;
SQL> select package1.a_constant from dual;
select package1.a_constant from dual
ORA-06553: PLS-221: 'A_CONSTANT' is not a procedure or is undefined
SQL> select package1.get_const(1) from dual;
PACKAGE1.GET_CONST(1)
--------------------------------------------------------------------------------
Constant value a
SQL>
РЕДАКТИРОВАТЬ: Если вы не можете изменить эти пакеты, можете ли вы создавать новые функции или пакеты? Если можете, вы можете решить эту проблему следующим образом:
CREATE OR REPLACE FUNCTION get_const(p_id NUMBER) RETURN VARCHAR2 IS
BEGIN
IF p_id = 1 THEN
RETURN package1.a_constant;
ELSIF p_id = 2 THEN
RETURN package1.b_constant;
END IF;
RETURN NULL;
END;
/
SQL> select get_const(1) from dual;
GET_CONST(1)
--------------------------------------------------------------------------------
Constant value a
SQL> select get_const(2) from dual;
GET_CONST(2)
--------------------------------------------------------------------------------
Constant value b
SQL>
Вам разрешено ссылаться на общедоступные переменные из других объектов PL / SQL.
В ответ на ваш последний комментарий я добавил код, чтобы показать, как можно написать функция для получения разных значений из пакета с помощью одной функции. Если это не сработает, боюсь, вы на пресловутом ручье.