Вот что я сделал бы, посмотрите, помогает. Я создам функцию (не процедуру), которая возвращает таблицу . Для этого я сначала создам тип (ы):
SQL> create or replace type t_record as object (tn varchar2(30), cnt number);
2 /
Type created.
SQL> create or replace type t_table as table of t_record;
2 /
Type created.
SQL>
Функция:
FOR
Я выбираю таблицы, которые содержать, что столбец L_STR
используется для составления оператора SELECT
DBMS_OUTPUT.PUT_LINE
используется для его первого отображения, чтобы я мог визуально проверить, правильно ли он установлен или нет , EXECUTE IMMEDIATE
Тестирование:
SQL> select * from table (f_colname('DEPTNO', '10'));
TN CNT
------------------------------ ----------
TEST_201812 1
DEPT 1
EMP 3
SQL> select * from table (f_colname('ENAME', 'KING'));
TN CNT
------------------------------ ----------
EMP 1
BONUS 1
SQL>
Это не будет работать должным образом для некоторых типов данных (таких как DATE
) и должно быть скорректировано, если необходимо.
[РЕДАКТИРОВАТЬ: после того, как вы отредактировали вопрос]
Хорошо, тогда это еще проще. Это все еще должна быть функция (которая возвращает логическое значение, поскольку вы сказали, что - в случае, если что-то найдено - вы хотите вернуть TRUE
). Код во многом похож на предыдущую функцию.
SQL> create or replace function f_colname
2 (par_column_name in varchar2,
3 par_column_value in varchar2
4 )
5 return boolean
6 is
7 l_str varchar2(200);
8 l_cnt number;
9 retval boolean := false;
10 begin
11 for cur_r in (select table_name
12 from user_tab_columns
13 where column_name = par_column_name
14 )
15 loop
16 l_str := 'select count(*) from ' || cur_r.table_name ||
17 ' where ' || par_column_name || ' = ' ||
18 chr(39) || par_column_value || chr(39);
19 -- Display l_str first, to make sure that it is OK:
20 -- dbms_output.put_line(l_str);
21 execute immediate l_str into l_cnt;
22 if l_cnt > 0 then
23 retval := true;
24 exit;
25 end if;
26 end loop;
27 return retval;
28 end;
29 /
Function created.
Тестирование: поскольку вы не можете вернуть логическое значение на уровне SQL, вы должны использовать анонимный блок PL / SQL, как показано ниже:
SQL> declare
2 l_ret boolean;
3 begin
4 if f_colname('DEPTNO', '15') then
5 dbms_output.put_line('It exists');
6 else
7 dbms_output.put_line('It does not exist');
8 end if;
9 end;
10 /
It does not exist
PL/SQL procedure successfully completed.
SQL>
Это - дубликат этого , и да,/p:DefineConstants действительно хорошо работает, и конфигуратор является правильным, это переопределит ВСЕ условные символы, уже определенные в Файле Проекта (который хорош, по моему скромному мнению), таким образом, необходимо будет определить их всех.
Попробуйте
msbuild /p:DefineConstants=DEBUG;DEMO MySolution.sln
, необходимо включать ОТЛАДКУ или ВЫПУСК и любые другие константы, уже определенные в файле решения, но я думаю, что это должно работать.Отказ от ответственности: Я на самом деле никогда не пробовал его сам.