select substr(参数值,instr(参数值,'=',1)+1,instr(参数值,',',1)-instr(参数值,'=',1)-1) as 得到A的值,substr(参数值,instr(参数值,'=',1)+1,instr(参数值,',',1)-instr(参数值,'=',1)-1) +长度 as 得到L值, substr(参数值,instr(参数值,'=',1)+1,instr(参数值,',',1)-instr(参数值,'=',1)-1) +长度025710 as 得到表面积 from 表名
你test的时候需 在test下面的inmonth里面输入一个值!
比如
create procedure c(a in varchar2,b out varchar2)
is
begin
b:=a;
end;
test的时候
需要在a 的value中输入一个值!
b不用输入,在执行完procedure后b便会有一个值(a)
1、首先打开一个的PLSQL Developer的界面中,点击左上角的工具,如下图所示。
2、然后在打开的工具下拉菜单中,点击首选项,如下图所示。
3、接着在打开的窗口中,点击左侧中的输出选项,如下图所示。
4、进入到了输出界面中,在缓冲区大小中输入大小。
5、大小输入完成之后,点击确定,如下图所示就完成了。
用动态SQL就可以了
CREATE OR REPLACE PROCEDURE COMMDEVIDEPAGE(P_TABLENAME IN VARCHAR2,
P_SIZE IN NUMBER,
P_PAGENOW IN NUMBER,
P_COUNT OUT NUMBER,
P_COUTPAGE OUT NUMBER,
P_CURSOR OUT SYS_REFCURSOR) IS
V_SQL VARCHAR2(1000);
V_SIZE NUMBER;
V_PAGENOW NUMBER;
V_BEGIN NUMBER;
V_END NUMBER;
BEGIN
V_SQL := 'SELECT COUNT() FROM ' || P_TABLENAME;
EXECUTE IMMEDIATE V_SQL
INTO P_COUNT; --计算总记录数
--求总页数
IF MOD(P_COUNT, P_SIZE) = 0 THEN
P_COUTPAGE := FLOOR(P_COUNT / P_SIZE);
ELSE
P_COUTPAGE := FLOOR(P_COUNT / P_SIZE) + 1;
END IF;
V_BEGIN := (P_PAGENOW - 1) P_SIZE + 1;
V_END := P_PAGENOW P_SIZE;
OPEN P_CURSOR FOR 'Select p From (Select Rid
From (Select Rid, Rownum Rn
From (Select Rowid Rid
From ' || P_TABLENAME || '
Where Promo_Id Is Not Null
Order By Promo_Id)
Where Rownum <=' || V_END || ')
Where Rn >=' || V_BEGIN || ') t,
' || P_TABLENAME || ' p
Where pRowid = tRid';
END COMMDEVIDEPAGE;
在oracle plsql程序块中,只能使用DML和常规的事务控制语句(TCL),
你这个是在块中使用了DDL,这个是不允许的,因为oracle的plsql是提前bind的(预编译),而ddl所影响的对象往往是不存在的,这个是预编译所不允许的,所以如果想在块中使用ddl,则必须使用动态sql(所起作用就是让编译推迟到runtime)
原理讲的可能有点模糊,呵呵。感兴趣的可以系统的看下相关资料,这里把你的程序简单改动下就可以通过编译了:
declare
a varchar2(50):='20100422';
b varchar2(50):='20100424';
begin
execute immediate 'create table test as select from oct_t_ehr where ehr_date between a and b';
end;
以上就是关于在PLSQL中用SQL查询语句怎样实现图中情况全部的内容,包括:在PLSQL中用SQL查询语句怎样实现图中情况、plsql中如何单步调试带参数的存储过程、plsql中怎么调用带输出参数的存储过程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)