怎么样 用Oracle的存储过程 对A表数据按照B数据进行分摊
发布网友
发布时间:2022-04-10 16:00
我来回答
共1个回答
热心网友
时间:2022-04-10 17:30
你好!
使用存储过程有点多此一举,你理解一下我下面的SQL:
WITH T AS (
SELECT 'A1' AS INV,1 ODR, 43 amt FROM DUAL
UNION ALL SELECT 'A1' AS INV,2 ODR, 44 amt FROM DUAL
UNION ALL SELECT 'A1' AS INV,3 ODR, 45 amt FROM DUAL
UNION ALL SELECT 'A2' AS INV,1 ODR, 60 amt FROM DUAL
UNION ALL SELECT 'A2' AS INV,2 ODR, 66 amt FROM DUAL
UNION ALL SELECT 'A3' AS INV,1 ODR, 11 amt FROM DUAL
UNION ALL SELECT 'A3' AS INV,2 ODR, 22 amt FROM DUAL
),
t1 AS (
SELECT 'A1' ISV,100 MNT FROM DUAL UNION ALL
SELECT 'A2' ISV,150 MNT FROM DUAL UNION ALL
SELECT 'A3' ISV,30 MNT FROM DUAL
)
SELECT inv,odr,CASE WHEN amt_sum <= mnt THEN amt
ELSE amt-(amt_sum-mnt) END mnt FROM (
SELECT T.*, SUM(AMT) OVER(PARTITION BY INV ORDER BY ODR) AMT_SUM, T1.MNT
FROM T, T1
WHERE T.INV = T1.ISV)
望采纳!
怎么样 用Oracle的存储过程 对A表数据按照B数据进行分摊
使用存储过程有点多此一举,你理解一下我下面的SQL:WITH T AS ( SELECT 'A1' AS INV,1 ODR, 43 amt FROM DUALUNION ALL SELECT 'A1' AS INV,2 ODR, 44 amt FROM DUALUNION ALL SELECT 'A1' AS INV,3 ODR, 45 amt FROM DUALUNION ALL SELECT 'A2' AS INV,1 ODR, 60 ...
非结构化数据如何可视化呈现?
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准...
oracle中将A表中的数据插到B表中,若B表中存在该数据则不插入,存储过程...
END INSERTTABLEDATA; 如果不在同一个数据库 那么建立一个DATABASE LINK就行了create database link ATOB connect to 数据库A的用户名 identified by 密码 using '数据库服务名'; INSERT INTO B(CJRQ,RYBH,RYXM,RZRQ,ZJBH)SELECT CJRQ,RYBH,RYXM,RZRQ,ZJBH FROM 用户名.A@ATOB;
Oracle数据表中,如何将某条记录按某数据(数量)的不定比列分割成N条记录...
oracle存储过程很长时间没用过了,只能提些建议了 打开游标,选出符合条件的记录,譬如数量>200 游标循环 死循环 创建1到200的随机数,存入变量 插入一条新记录,no、name与游标当前记录相同,数量为随机数 判断当前记录的数量-变量是否小于指定数,若是则更新当前记录的数量为当前记录数量-变量,并退出...
在oracle中,若想要A表中的数据一旦更新就将该条数据原数据放入B表中备...
或者用程序实现,当你的程序更新数据前,先备份要修改的a表数据。可以把备份的代码做成存储过程,供不同程序调用。但总不及触发器简单
oracle 如何在一个表中取A列最大的那条记录,如果A列等于最大值同时有...
或者存储过程。select max(A) from table_name; ---取A列最大的记录,譬如说=100;select count(A) as countA from table_name where A=100;---取等于最大值的有多少条数据;然后做判断 if countA =1 ---按照你的具体做法实现SQL else select max(B) from table_name;fi ...
oracle中,如果a表跟b表关联查询的问题
1、数据准备:--创建A表 CREATE TABLE qh_a (filed1 Varchar2(3),filed2 CHAR(1));--创建B表 CREATE TABLE qh_b (filed1 CHAR(1),filed2 VARCHAR(3));--初始化A表与B表的数据。INSERT INTO qh_a VALUES('001','x');INSERT INTO qh_a VALUES('002','y');INSERT INTO qh_b ...
oracle遇到个问题,我要写一个存储过程,要求吧A表中的奇熟列插到B表中...
insert into b select * from a where mod(rowno,2) =1;sql一句就可以了,不用存储过程。
oracle存储过程提问:oracle 用存储过程将某一表里符合条件的数据查出...
先把表创建起来,然后用insert语句插入。create or replace procedure P_Insert(v_date in varchar2,v_cp varchar2) is begin INSERT INTO ora201301 SELECT * FROM bh WHERE 字段名1 BETWEEN v_date||'/01' AND v_date||'/31' AND 字段名2=v_cp;COMMIT;end P_Insert;...
Oracle中怎样用存储过程将一段字符串以逗号为界截取,并将得到的子串存...
--通过游标遍历调用方法拆取存表:--方法 create or replace function f_test_substr(prm1 varchar2, --地prm2 varchar2 , --名称prm3 varchar2, --IPprm4 varchar2 --结果)return varchar2asv_n int:=0; --第几次取v_l int; --:截取次数v_s varchar2(2000); --...
oracle能否用一个存储过程,做到先创表a,再向a插数据,再通过a生成表b...
1、存储过程中的内容都是顺序执行的,不会存在你说的a还没有创号,就执行其他sql的情况,你是结合你的实际业务来描述可能出现的情况吧 2、你需求的存储过程如下 create or replace procedure prc_test as begin -- 创建表 execute immediate 'create table a (col1)';-- 向表中插入数据 execute ...