Если я правильно понимаю, функция генерирует оператор SQL из предоставленных входных данных. Если это так, вы можете сделать это, используя JavaScript UDF:
CREATE OR REPLACE FUNCTION aggregate_string
(p_table_name VARCHAR
,p_column_name VARCHAR
,p_where_column_name VARCHAR
,p_where_value VARCHAR
,p_order_by_YN VARCHAR
,p_order_by_column VARCHAR
)
RETURNS VARCHAR
LANGUAGE JAVASCRIPT
AS
$$
var sql = "select " + P_COLUMN_NAME + " from " + P_TABLE_NAME + " where " + P_WHERE_COLUMN_NAME + " = ";
if (isNaN(P_WHERE_VALUE)) {
sql += "'" + P_WHERE_VALUE.replace(/'/g, "''") + "'";
} else {
sql += P_WHERE_VALUE;
}
if (P_ORDER_BY_YN.toUpperCase() == 'Y') {
sql += " order by " + P_ORDER_BY_COLUMN;
}
return sql;
$$
;
-- Where is not a number, so the where condition is single quoted
select aggregate_string('TABLE_NAME1', 'COL1, COL2, COL3', 'WHERE_COLUMN1', 'WHERE_VALUE', 'Y', 'ORDER_BY_COL1');
-- Where is a number (whether or not passed in single quotes), so the where condition is not quoted.
select aggregate_string('TABLE_NAME1', 'COL1, COL2, COL3', 'WHERE_COLUMN1', 5, 'Y', 'ORDER_BY_COL1');
-- Order by is NO, so there is no order by clause
select aggregate_string('TABLE_NAME1', 'COL1, COL2, COL3', 'WHERE_COLUMN1', 'WHERE_VALUE', 'N', '');