当前位置:首页 » 服务存储 » prod存储过程
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

prod存储过程

发布时间: 2022-05-30 16:08:31

‘壹’ 新建存储过程,将sql查询语句变为存储过程可以返回值

学习存储过程的简单方法; 就是在select的 前面加 create proc 存储过程名 as select预计 end; 调用存储过程的时候自然就是返回结果数据集了;不需要return返回值的;

‘贰’ 关于如何在mysql中创建存储过程

创建存储过程
CREATE PROCEDURE 存储过程名()
一个例子说明:一个返回产品平均价格的存储过程如下代码:
CREATE PROCEDURE proctpricing()
BEGIN
SELECT Avg(prod_price) AS priceaverage
FROM procts;
END;
//创建存储过程名为proctpricing,如果存储过程需要接受参数,可以在()中列举出来。即使没有参数后面仍然要跟()。BEGIN和END语句用来限定存储过程体,过程体本身是个简单的SELECT语句

‘叁’ sql存储过程用递归

表结构:
sale_area销售分区表
PK#area_id
class_id
gonghao
prod_class产品分类表
PK#class_id
class_name
问题sql语句:
select
distinct
pa.class_id
from
prod_class
As
pa,prod_class
As
pb,sale_area
where
pb.class_id
in(select
sale_area.class_id
from
sale_area
where
sale_area.gonghao=<param>)
and
pa.class_id
like
pb.class_id||'%'
问题定义:
根据传入的参数gonghao来确定对应的class_id集,然后遍历这个class_id集,并“扩充”这个集合
要理解“扩充”必须知道class_id是这样设等级:
0为最高级
|_01
|
|_011
|
|_012
|_02
|_011
|_012
那么拥有等级0的话,所有的等级都应该可以访问,拥有等级01的话,011、012也可以访问。
这句sql的目的就是得到当前员工能访问的所有产品分类及它的子集。
通过自连接的做法在Oracle里是对的,在DB2里就错,原因在于DB2中谓词like两边至少有一个是字符串,也就是说DB2不认为pb.class_id||'%'是字符串。
求解:
要完成上面的任务有什么可替代的办法或改进的地方,注意环境是DB2
UDB
7.2。
---------------------------------------------------------------
就是树的问题。
使用公共表达式可以完成。
你在信息中心里面按recusion去搜索,可以找到递归sql的写法。
---------------------------------------------------------------
问题写的很清楚,我喜欢!
如果要使用DB2的公共表达式建议你把
prod_class产品分类表结构改一下
PK#class_id
class_name
Parent_Class_id
sql语句如下:
with
temp_class_id(
class_id,class_name)
(
select
pc.class_id,pc.class_name
from
prod_class
pc
where
pc.class_id
in
(select
sale_area.class_id
from
sale_area
where
sale_area.gonghao=<param>)
union
select
pc.class_id,pc.class_name
from
prod_class
pc,
temp_class_id
tc
where
pc.parent_id
=
tc.class_id)
select
*
from
temp_class_id;

‘肆’ 调用存储过程(判断出输入参数是不是素数了的存储过程 sp_sushu)输出50-100之间素数的和

CREATE OR REPLACE PACKAGE BODY xxxx_test_pck IS

PROCEDURE get_sushu_prod(p_tag OUT NUMBER) IS
ln_num NUMBER;
ln_tag NUMBER := 0;
BEGIN
FOR i IN 50 .. 100 LOOP
SELECT MOD(i, 2) INTO ln_num FROM al;
IF ln_num = 1 THEN
ln_tag := ln_tag + i;
END IF;
END LOOP;
p_tag := ln_tag;

END;
END xxxx_test_pck;

‘伍’ expdp怎么导出存储过程 函数 触发器等

:Tools-Export Tables 不能导出存储过程和触发器,只能导出表的结构和该表的数据,存储过程和触发器的导出你可以用 Tools-Export User Objects

‘陆’ 发货订单实效性,用mysql如何实现

可以使用mysql的事件任务来实现

这需要你先编写一个存储过程,查询3天内没有状态没有变更为发货状态的数据,然后释放库存的逻辑

比如这个逻辑存储过程叫 prod()

然后可以创建一个存储过程,每天执行一次prod()

CREATEEVENTxxx
ONSCHEDULEEVERY1day
BEGIN
CALLprod()
END

这样就创建了一个每天执行一次prod()存储过程的事件任务了,xxx是事件任务的名字

‘柒’ mysql 存储过程

1. exec 存储过程名
2. exec 存储过程名 参数1,参数2,参数3......
或者exec 存储过程名 参数1='',参数2='',参数3=''......

‘捌’ 存储过程报错:PLS-00103: 出现符号 "("在需要下列之一时:

问题属于入参类型错误:
plsql中procere的入参类型,如果是number或varchar2的话不需要定义长度。否则编译不能通过。

‘玖’ 多表存储过程怎么写 表:order 字段 id,prod_id 表:prod 字段:id,total(每增加一个订单,total就增加一

select * from t where 备注 like'%异常%' and id in (select top 10 id from t) order by 时间 desc

也就是先取前十条,然后在这十条中异常的,应该是可以的,我试过了