该存储过程,传入一个用户帐号,然后先去SYS_USER 检查这个帐号有没有存在,
如果不存,就根据这个帐号去其他表查询出我要的信息然后分别插入SYS_USER 和SYS_USER_INFO
如果存在,就执行修改操作,也是去其他表将我要修改的字段查询出来,然后再执行UPDATE
存储过程如下:
CREATE OR REPLACE PROCEDURE "CMS"."SYN_SYS_USER"(PARTY_ID IN VARCHAR2(50)) IS
BEGIN
DECLARE
S_COUNT number
ORG_COUNT number
ORG_COUNT2 number
DI_SHI_CODE_TEMP VARCHAR2(50)
ATT1_TEMP VARCHAR2(50)
SELECT COUNT(*) INTO S_COUNT FROM SYS_USER SU1 WHERE SU1.PARTY_ID=PARTY_ID
IF (S_COUNT=0) THEN
SELECT COUNT(*) INTO ORG_COUNT FROM CARD_PROVIDER WHERE PROVIDER_ID=(SELECT PA.COMPANY_ID FROM PERSON_ALL PA WHERE PA.PARTY_ID=PARTY_ID)
IF (ORG_COUNT>0) THEN
ATT1_TEMP:='C'
SELECT ID INTO DI_SHI_CODE_TEMP FROM CARD_PROVIDER WHERE PROVIDER_ID=(SELECT PA.COMPANY_ID FROM PERSON_ALL PA WHERE PA.PARTY_ID=PARTY_ID)
END IF
SELECT COUNT(*) INTO ORG_COUNT2 FROM LOCATION WHERE ORGANIZATION_ID=(SELECT PA.COMPANY_ID FROM PERSON_ALL PA WHERE PA.PARTY_ID=PARTY_ID)
IF (ORG_COUNT2>0) THEN
ATT1_TEMP:='D'
SELECT ID INTO DI_SHI_CODE_TEMP FROM LOCATION WHERE ORGANIZATION_ID=(SELECT PA.COMPANY_ID FROM PERSON_ALL PA WHERE PA.PARTY_ID=PARTY_ID)
END IF
INSERT INTO SYS_USER(ID, PARTY_ID, CURRENT_PASSWORD, ENABLED, USER_LOGIN_ID)
SELECT (SELECT MAX(SU.ID)+1 FROM SYS_USER SU) AS SUID,ULA.PARTY_ID,ULA.CURRENT_PASSWORD,ULA.ENABLED,ULA.PARTY_ID FROM USER_LOGIN_ALL ULA WHERE ULA.PARTY_ID=PARTY_ID
COMMIT
INSERT INTO SYS_USER_INFO(ID, USER_ID,LAST_NAME, MOBILEPHONE, TELEPHONE, GENDER,EMAIL,COMMENTS,IS_SEND_MSM,DI_SHI_CODE, ATT1)
SELECT (SELECT MAX(SUI.ID)+1 FROM SYS_USER_INFO SUI) AS SUIID,(SELECT SU2.ID FROM SYS_USER SU2 WHERE SU2.PARTY_ID=PARTY_ID) AS SU2ID,
PA.LAST_NAME,PA.MOBILEPHONE,PA.TELEPHONE,PA.GENDER,PA.EMAIL,PA.COMMENTS, PA.IS_SEND_MSM,DI_SHI_CODE_TEMP,ATT1_TEMP FROM PERSON_ALL PA WHERE PA.PARTY_ID=PARTY_ID
COMMIT
ELSE
FOR TEMP_USER IN (SELECT ULA.PARTY_ID, DECODE(ULA.ENABLED,'T',1,0) AS ENABLED,ULA.CURRENT_PASSWORD FROM USER_LOGIN_ALL ULA WHERE ULA.PARTY_ID=PARTY_ID) LOOP
UPDATE SYS_USER SET ENABLED=TEMP_USER.ENABLED,CURRENT_PASSWORD=TEMP_USER.CURRENT_PASSWORD WHERE PARTY_ID=TEMP_USER.PARTY_ID
END LOOP
FOR TEMP_USER_INFO IN (SELECT PA.PARTY_ID,PA.LAST_NAME,PA.MOBILEPHONE,PA.TELEPHONE,PA.GENDER,PA.EMAIL,PA.COMMENTS,PA.IS_SEND_MSM FROM PERSON_ALL PA WHERE PA.PARTY_ID=PARTY_ID) LOOP
UPDATE SYS_USER_INFO SET LAST_NAME=TEMP_USER_INFO.LAST_NAME,MOBILEPHONE=TEMP_USER_INFO.MOBILEPHONE,TELEPHONE=TEMP_USER_INFO.TELEPHONE,GENDER=TEMP_USER_INFO.GENDER,EMAIL=TEMP_USER_INFO.EMAIL,COMMENTS=TEMP_USER_INFO.COMMENTS,IS_SEND_MSM=TEMP_USER_INFO.IS_SEND_MSM
WHERE USER_ID=(SELECT SU.ID FROM SYS_USER WHERE SU.PARTY_ID=TEMP_USER_INFO.PARTY_ID)
END LOOP
END IF
Exception
When others then
Rollback
END
存储过程创建的代码在工具里执行没问题
在JAVA中是这样调用的
Session session = getSession();
Connection connection = session.connection();
CallableStatement proc = connection.prepareCall("{Call SYN_SYS_USER(?)}");
proc.setString(1,"lintao");
proc.execute();
然后报以下错误
java.sql.SQLException: ORA-06550: line 1, column 11:
PLS-00905: object CMS.SYN_SYS_USER is invalid
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
相关推荐
Oracle 存储过程学习目录是 Oracle 存储过程学习的基础知识,了解 Oracle 存储过程的基本语法、基础知识和一些常见问题的解决方法是非常重要的。本文将从 Oracle 存储过程的基础知识开始,逐步深入到 Oracle 存储...
#### 关于Oracle存储过程的若干问题备忘 1. **数据表别名不能加as**:在Oracle中,为数据表定义别名时,不使用关键字`as`,例如:`SELECT * FROM table_name t`。 2. **使用SELECT INTO**:在存储过程中,使用`...
本文将详细介绍如何使用C#语言连接Oracle数据库,并演示如何调用Oracle存储过程,特别是带有输出参数的情况。这些知识点对于初学者来说尤为重要。 #### 前置知识 1. **C#基础**:理解C#的基本语法和概念。 2. **...
#### 四、Oracle存储过程中的常见问题 1. **数据表别名**:在Oracle中,定义数据表别名时不能使用`AS`关键字。 2. **SELECT INTO**:在存储过程中使用`SELECT INTO`语句时,如果选择特定字段,则必须紧接着使用`...
### Oracle存储过程学习经典知识点详解 #### 一、Oracle存储过程基础知识 **1. 商业规则与业务逻辑的实现** - **定义**: 存储过程是存储在Oracle数据库中的可执行程序单元,通常用于封装复杂的业务逻辑或数据...
### Oracle存储过程语法详解 #### 一、存储过程概述 ...以上就是关于Oracle存储过程的基本语法及其应用的详细介绍,通过这些知识点的学习,可以帮助开发人员更好地理解和使用Oracle存储过程来解决复杂的数据处理问题。
调用Oracle存储过程是数据库管理中的常见任务,尤其对于需要执行大量数据处理或事务操作的场景。下面我们将详细探讨如何在Oracle中调用存储过程以及其相关知识点。 1. **创建存储过程**: 在Oracle中,你可以使用`...
下面我们将深入探讨Oracle存储过程的基础知识、基本语法以及在实际应用中的一些常见问题和调用方式。 1. **Oracle存储过程基础知识** - 存储过程是一组为了完成特定功能的SQL和PL/SQL语句集合,它们被预先编译并...
### Oracle存储过程、函数与DBLink详解 #### 一、Oracle存储过程简介 在Oracle数据库中,存储过程是一种预编译好的SQL代码集合,它可以接受输入参数、返回单个值或多个值,并能够执行复杂的数据库操作。存储过程...
在Java编程中,与Oracle数据库进行交互是常见的需求,尤其是当需要执行复杂的业务逻辑时,我们通常会使用Oracle存储过程。存储过程是预编译的SQL语句集合,它可以提高性能,封装复杂逻辑,并减少网络通信量。本教程...
标题中的“pb中执行oracle存储过程脚本”指的是在PowerBuilder(简称PB)环境中调用Oracle数据库的存储过程。PowerBuilder是一种可视化的开发工具,常用于构建数据驱动的应用程序。Oracle存储过程则是在Oracle数据库...
而`oracle存储过程.chm`则涵盖了存储过程的创建、调用、修改和删除等相关知识,以及如何在存储过程中使用各种PL/SQL特性。 总的来说,Oracle函数和存储过程是数据库开发的核心工具,通过深入学习和实践,你将能够更...
本文将深入探讨Oracle存储过程的基础知识、语法以及常见问题。 1. **基础知识** 存储过程是由SQL和PL/SQL语句组合而成的程序,它可以包含声明、变量、条件控制、循环结构等。通过存储过程,商业规则和业务逻辑被...