Oracle21c数据库普通用户创建及授权,建表,创建存储过程、序列、触发器

一、Oracle数据库错误 ORA-65096

表示你尝试在多租户容器数据库(CDB)环境中创建一个公共用户(common user)或角色,但没有使用正确的前缀。在多租户架构中,公共用户的用户名必须以 C##c## 开头。

若想在CDB创建用户,用如下代码:

前提是先登录进sys系统账户中

但是,如果你的意图是在特定的可插拔数据库(PDB)中创建一个局部用户(local user),你不应该使用 C##c## 前缀。你可能直接在CDB环境中而不是在特定的PDB中尝试执行该命令。

为了在PDB中创建一个用户,你需要确保首先连接到了正确的PDB。以下是在PDB中创建用户的步骤:

1.连接到目标PDB: 如果你使用的是 SQL*Plus 或类似的工具,你可以使用以下命令连接到目标PDB:

sqlplus

conn sys/orcl as sysdba;

alter session set container=<pdbname>;

这里的 sys 是你的系统管理员账户,而 pdb_name 是你的可插拔数据库的名字,一般是ORCLPDB。

2.检查当前的容器: 一旦连接,你可以运行以下命令来确认你当前连接的是哪个容器:

SHOW CON_NAME;

如果你还没在PDB中,你需要切换到目标PDB。使用:

ALTER SESSION SET CONTAINER = pdb_name;

替换 pdb_name 为你的目标PDB名称。

3.创建用户 : 一旦确定你在正确的PDB中,使用以下命令创建用户,注意不要使用 C##c## 前缀:

CREATE USER fxy IDENTIFIED BY "123456";

在这里,fxy 是新用户的用户名,"123456" 是用户的密码。

授予权限 : 创建用户后,你需要给用户授予最起码的权限,比如 CREATE SESSION,以便用户可以登录:

GRANT CREATE SESSION TO fxy;

二、建表

--员工表

create table emp
(
empno NUMBER(20) not null,
dpetno NUMBER(20),
ename VARCHAR2(20),
user_id NUMBER(20) not null,
birthdate DATE,
gender VARCHAR2(20),
job VARCHAR2(10),
hiredate DATE,
sal NUMBER,
comm NUMBER,
mgr NUMBER(20),
constraint PK_EMP primary key (empno)
);

--部门表

create table dept (
dpetno NUMBER(20) NOT NULL,
dname VARCHAR2(20) NOT NULL,
loc VARCHAR2(20)
);

三、Oracle21C创建存储过程、序列、触发器

1. -- 存储过程

--获取部门人数

CREATE OR REPLACE PROCEDURE get_department_employee_count(

department_id IN NUMBER,

employee_count OUT NUMBER

)

IS

BEGIN

-- Initialize the OUT parameter

employee_count := 0;

-- Attempt to get the employee count

BEGIN

SELECT COUNT(*) INTO employee_count FROM employee WHERE deptno = department_id;

EXCEPTION

-- Handle the NO_DATA_FOUND exception

WHEN NO_DATA_FOUND THEN

DBMS_OUTPUT.PUT_LINE('No employees found for the specified department.');

-- Handle other exceptions as needed

WHEN OTHERS THEN

DBMS_OUTPUT.PUT_LINE('An error occurred: ' || SQLERRM);

END;

END;

/
-- 调用

DECLARE

v_employee_count NUMBER;

BEGIN

get_department_employee_count(department_id => 1, employee_count => v_employee_count);

DBMS_OUTPUT.PUT_LINE('Employee Count: ' || v_employee_count);

END;

/
-- 查询主管姓名

SELECT

e.empno,

e.ename,

e.birthdate,

e.gender,

e.position,

e.hiredate,

e.id,

e.sal,

e.comm,

e.deptno,

s.ename AS supervisorName

FROM

employee e

LEFT JOIN

employee s ON e.id = s.empno

2. -- 序列

CREATE SEQUENCE emp_seq START WITH 1 INCREMENT BY 1 NOCACHE;

CREATE SEQUENCE dept_seq START WITH 1 INCREMENT BY 1 NOCACHE;

CREATE SEQUENCE user_seq START WITH 1 INCREMENT BY 1 NOCACHE;

drop sequence emp_seq;

drop sequence dept_seq;

3. -- 触发器

CREATE OR REPLACE TRIGGER delete_department_employees

BEFORE DELETE ON department

FOR EACH ROW

DECLARE

BEGIN

-- 在删除部门之前,将部门中的员工转移到其他部门(例如,部门号为 0)

UPDATE employee SET deptno = 0 WHERE deptno = :OLD.deptno;

END;

/

四、idea如何连接Oracle数据库

yml文件中写入

复制代码
spring:
  datasource:
    type: oracle.ucp.jdbc.PoolDataSourceImpl
    driver-class-name: oracle.jdbc.driver.OracleDriver
    url: jdbc:oracle:thin:@localhost:1521:ORCL
    username: 用户名
    password: 密码

创作不易,点个关注再走呗

相关推荐
indexsunny5 小时前
互联网大厂Java求职面试实战:Spring Boot与微服务在电商场景中的应用解析
java·数据库·spring boot·微服务·面试·消息队列·电商
想睡八个小时6 小时前
数据库导入数据步骤及问题
数据库
拾贰_C6 小时前
【无标题】
运维·服务器·数据库·pytorch·python·考研·学习方法
ChrylZzz6 小时前
Oracle RAC和读写分离库场景优势对比
数据库
qq19257230276 小时前
mysql高级查询
数据库·mysql
dishugj6 小时前
【oracle】 RMAN数据库迁移 19c(RAC到单实例)
数据库·oracle
骑着蜗牛闯宇宙6 小时前
TP8上传Excel地址数据批量标注到高德地图
数据库·php·excel
TDengine (老段)6 小时前
TDengine JAVA 语言连接器入门指南
java·大数据·开发语言·数据库·python·时序数据库·tdengine
oMcLin6 小时前
如何在Ubuntu 22.04上通过配置LVM优化存储,提升香港服务器的大规模数据库的读写性能?
服务器·数据库·ubuntu
艾莉丝努力练剑6 小时前
【QT】初识QT:背景介绍
java·运维·数据库·人工智能·qt·安全·gui