数据库大神请进,求助一句SQL

简单的说就是不存在即插入,存在即修改的问题。数据库表如下:user_IDuser_nameuser_status当传入一个user_id时,如果表里已经存在了,就把对应的... 简单的说就是不存在即插入,存在即修改的问题。数据库表如下:
user_ID user_name user_status

当传入一个user_id时,如果表里已经存在了,就把对应的user_status设置成1,如果user_id不存在,就插入这一条数据。
是oracle数据库,求sql语句,效率要高一点的。
展开
 我来答
wangxiaodi7428
2013-10-24 · TA获得超过313个赞
知道小有建树答主
回答量:114
采纳率:0%
帮助的人:95.1万
展开全部
最近写过一个类似的例子,跟你要求的几乎一样,你可以参考一下结构和思想,改一下表什么的就行,希望对你有帮助:

创建存储过程:P_UPDATE_ST_HACHUJ_ALL_G

输入参数:P$PO_DT date型

输出参数:P$RET number型

存储过程具体的操作

首先获取采购日期 (P$PO_DT)当月的采购信息(ST_HACHUJ_ALL)。

然后将取得的数据插入ST_HACHUJ_ALL_G表中 或者 更新 ST_HACHUJ_ALL_G表

(PO_NO在ST_HACHUJ_ALL_G中不存在,数据插入ST_HACHUJ_ALL_G,SEQ值= 0;

PO_NO在ST_HACHUJ_ALL_G中存在,更新ST_HACHUJ_ALL_G,SEQ值+ 1)。

CREATE OR REPLACE PROCEDURE P_UPDATE_ST_HACHUJ_ALL_G2

(P$PO_DT IN DATE,P$RET OUT NUMBER)

AS

V$CGXX ST_HACHUJ_ALL% ROWTYPE;

V$PO_NO NUMBER( 10);

CURSOR CUR_A

IS

SELECT T1.*

FROM ST_HACHUJ_ALL T1

WHERE TO_CHAR(T1.PO_DT,'YYYYMM' )=TO_CHAR(P$PO_DT,'YYYYMM');

BEGIN

P$RET:=0;

OPEN CUR_A;

LOOP

FETCH CUR_A INTO V$CGXX;

EXIT WHEN CUR_A%NOTFOUND;

SELECT COUNT (*)INTO V$PO_NO FROM ST_HACHUJ_ALL_G WHERE PO_NO=V$CGXX.PO_NO;

IF V$PO_NO>0 THEN

UPDATE ST_HACHUJ_ALL_G SET CO_CD=V$CGXX.CO_CD,REV=V$CGXX.REV,SPPL_CD=V$CGXX.SPPL_CD,PSPPL_CD=V$CGXX.PSPPL_CD,PO_DT=V$CGXX.PO_DT,LAST_DLV_DT=V$CGXX.LAST_DLV_DT,

PURC_DPT_CD=V$CGXX.PURC_DPT_CD,PURC_USR_CD=V$CGXX.PURC_USR_CD,PO_SHET_ISSU_COMPL_FLG=V$CGXX.PO_SHET_ISSU_COMPL_FLG,SCST_SHET_ISSU_COMPL_FLG=V$CGXX.SCST_SHET_ISSU_COMPL_FLG,ABR_PO_FLG=V$CGXX.ABR_PO_FLG,

INCTRMS_CD=V$CGXX.INCTRMS_CD,UKEBASHO_CD=V$CGXX.UKEBASHO_CD,PAY_COND_CD=V$CGXX.PAY_COND_CD,CUR_CD=V$CGXX.CUR_CD,XCNTRCT_FLG=V$CGXX.XCNTRCT_FLG,XRATE_DT=V$CGXX.XRATE_DT,XRATE=V$CGXX.XRATE,XCNTRCT_NO=V$CGXX.XCNTRCT_NO,

NOT_BILL_ACC_FLG=V$CGXX.NOT_BILL_ACC_FLG,TRD_TYP=V$CGXX.TRD_TYP,SUBCON_FLG=V$CGXX.SUBCON_FLG,PAY_COMPL_FLG=V$CGXX.PAY_COMPL_FLG,PAY_DT=V$CGXX.PAY_DT,IV_TGT_FLG=V$CGXX.IV_TGT_FLG,RMRKS=V$CGXX.RMRKS,APPROVAL_FLG=V$CGXX.APPROVAL_FLG,

APPROVAL_NO=V$CGXX.APPROVAL_NO,APPROVAL_SEQ=V$CGXX.APPROVAL_SEQ,APRV_TYP=V$CGXX.APRV_TYP,LAST_APV_USR_ID=V$CGXX.LAST_APV_USR_ID,APV_ABSTRACT=V$CGXX.APV_ABSTRACT,NEXT_OPR_FLG=V$CGXX.NEXT_OPR_FLG,PO_SHET_NO=V$CGXX.PO_SHET_NO,

INS_TS=V$CGXX.INS_TS,INS_USR_CD=V$CGXX.INS_USR_CD,UPD_CNTR=V$CGXX.UPD_CNTR,UPD_TS=V$CGXX.UPD_TS,UPD_USR_CD=V$CGXX.UPD_USR_CD,SEQ=SEQ+ 1

WHERE PO_NO=V$CGXX.PO_NO;

ELSE

INSERT INTO ST_HACHUJ_ALL_G (PO_NO,CO_CD,REV,SPPL_CD,PSPPL_CD,PO_DT,LAST_DLV_DT,PURC_DPT_CD,PURC_USR_CD,PO_SHET_ISSU_COMPL_FLG,SCST_SHET_ISSU_COMPL_FLG,ABR_PO_FLG,

INCTRMS_CD,UKEBASHO_CD,PAY_COND_CD,CUR_CD,XCNTRCT_FLG,XRATE_DT,XRATE,XCNTRCT_NO,NOT_BILL_ACC_FLG,TRD_TYP,SUBCON_FLG,

PAY_COMPL_FLG,PAY_DT,IV_TGT_FLG,RMRKS,APPROVAL_FLG,APPROVAL_NO,APPROVAL_SEQ,APRV_TYP,LAST_APV_USR_ID,APV_ABSTRACT,NEXT_OPR_FLG,

PO_SHET_NO,INS_TS,INS_USR_CD,UPD_CNTR,UPD_TS,UPD_USR_CD,SEQ)

VALUES (V$CGXX.PO_NO,V$CGXX.CO_CD,V$CGXX.REV,V$CGXX.SPPL_CD,V$CGXX.PSPPL_CD,V$CGXX.PO_DT,V$CGXX.LAST_DLV_DT,V$CGXX.PURC_DPT_CD,

V$CGXX.PURC_USR_CD,V$CGXX.PO_SHET_ISSU_COMPL_FLG,V$CGXX.SCST_SHET_ISSU_COMPL_FLG,V$CGXX.ABR_PO_FLG,V$CGXX.INCTRMS_CD,V$CGXX.UKEBASHO_CD,V$CGXX.PAY_COND_CD,

V$CGXX.CUR_CD,V$CGXX.XCNTRCT_FLG,V$CGXX.XRATE_DT,V$CGXX.XRATE,V$CGXX.XCNTRCT_NO,V$CGXX.NOT_BILL_ACC_FLG,V$CGXX.TRD_TYP,

V$CGXX.SUBCON_FLG,V$CGXX.PAY_COMPL_FLG,V$CGXX.PAY_DT,V$CGXX.IV_TGT_FLG,V$CGXX.RMRKS,V$CGXX.APPROVAL_FLG,V$CGXX.APPROVAL_NO,

V$CGXX.APPROVAL_SEQ,V$CGXX.APRV_TYP,V$CGXX.LAST_APV_USR_ID,V$CGXX.APV_ABSTRACT,V$CGXX.NEXT_OPR_FLG,V$CGXX.PO_SHET_NO,

V$CGXX.INS_TS,V$CGXX.INS_USR_CD,V$CGXX.UPD_CNTR,V$CGXX.UPD_TS,V$CGXX.UPD_USR_CD,0 );

END IF ;

END LOOP ;

CLOSE CUR_A;

COMMIT;

EXCEPTION

WHEN NO_DATA_FOUND THEN

DBMS_OUTPUT.PUT_LINE( '无值');

ROLLBACK;

WHEN OTHERS THEN

P$RET:= SQLCODE;

ROLLBACK;

END;
美林数据技术股份有限公司
2023-07-25 广告
常用的大数据工具有以下这些:* Apache Cassandra:一种分布式的开源数据库。* Apache Drill:一种开源分布式系统,用于大规模数据集的交互分析。* Apache Elasticsearch:是Apache Lucen... 点击进入详情页
本回答由美林数据技术股份有限公司提供
蚀扑时实u
2013-10-24 · TA获得超过123个赞
知道小有建树答主
回答量:249
采纳率:0%
帮助的人:187万
展开全部
用merge,应该能实现,你可以百度一下,不知道你的传入的user_id从哪来的,不好写sql语句。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
傻帽emily
2013-10-24
知道答主
回答量:62
采纳率:0%
帮助的人:28.4万
展开全部
确实要写存储过程的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
翔阿狗
2013-10-24 · TA获得超过208个赞
知道小有建树答主
回答量:452
采纳率:0%
帮助的人:201万
展开全部
这要写存储过程的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式