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.如何用存储过程实现:
检查某一个表是否存在某一列 ,如果不存在 ,就创建
解决方案 »
- 新建了一个用户user1,怎样把user1用户的权限复制成和现有用户user2一样?
- ORACLE中sql基础问题!!!(急~~)
- [高手求助],SQL优化,一直困扰着的一个问题,无能为力了
- oracle存储过程如何输出结果集
- 关于大数据量表的嵌套查询性能问题
- 问个问题,实例、表空间、数据库、数据表、普通用户、系统管理员之间的关系?
- 创建一个自增长触发器,错误类型"无效的触发器说明",在线等,谢谢!
- 查询sql语句问题
- 求 oracle 10g 或11gW7 64位能用的安装包
- 求助oracle创建表空间时遇到ora00972 : 标识符过长
- Oracle并发问题
- ORA-19554:错误,请高手指教啊!
---------- ----------
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数据库开发常用的技术,而且必须要用好的。