1,大家都知道 sql语句后面的where子句一般都形如:where a=1;
如果从前台用户已经把 a=1 当做一整个表达式传入存储过程进行处理
该怎么写?
--expre=(a=1);
我这样写有错
create or pelace procedure mypro(expre in varchar2)
as
begin
....
.... where expre
oracle报条件表达式错误 编译不通过
2.如何用存储过程实现:
检查某一个表是否存在某一列 ,如果不存在 ,就创建
如果从前台用户已经把 a=1 当做一整个表达式传入存储过程进行处理
该怎么写?
--expre=(a=1);
我这样写有错
create or pelace procedure mypro(expre in varchar2)
as
begin
....
.... where expre
oracle报条件表达式错误 编译不通过
2.如何用存储过程实现:
检查某一个表是否存在某一列 ,如果不存在 ,就创建
---------- ----------
1 aa
2 bb
SQL> create or replace procedure mypro(expre in varchar2)
2 as
3 result varchar2(40);
4 v_name varchar2(40);
5 begin
6 result:='select name from t1 where '||expre;
7 execute immediate result into v_name;
8 dbms_output.put_line(v_name);
9 end;
10 /Procedure created.
SQL> set serveroutput on
SQL> exec mypro('id=1')
aaPL/SQL procedure successfully completed.
SQL> exec mypro('id=2')
bbPL/SQL procedure successfully completed.
Name Null? Type
----------------------------------------- -------- ---------------------------- ID NUMBER
NAME VARCHAR2(10)
SQL> create or replace procedure mypro(t_name in varchar2,col_name in varchar2,c
ol_type in varchar2)
2 as
3 flag number;
4 cmd varchar2(40);
5 begin
6 select count(*) into flag
7 from all_tab_columns
8 where owner='SCOTT' and
9 table_name=t_name and
10 column_name=col_name;
11 if flag=0 then
12 cmd:='alter table '||t_name||' add ('||col_name||' '||col_type||')';
13 execute immediate cmd;
14 end if;
15 end;
16 /Procedure created.
SQL> exec mypro('T1','SEX','varchar2(10)') --sex列不存在 因此存储过程执行完添加了相应列PL/SQL procedure successfully completed.SQL> desc t1
Name Null? Type
----------------------------------------- -------- ---------------------------- ID NUMBER
NAME VARCHAR2(10)
SEX VARCHAR2(10)
SQL> exec mypro('T1','ID','number') --id列已经存在 所以并没有添加列 PL/SQL procedure successfully completed.
SQL> desc t1
Name Null? Type
----------------------------------------- -------- ---------------------------- ID NUMBER
NAME VARCHAR2(10)
SEX VARCHAR2(10)
关键是使用动态SQL技术。Oracle数据库开发常用的技术,而且必须要用好的。