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: 密码

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

相关推荐
夜泉_ly3 小时前
MySQL -安装与初识
数据库·mysql
qq_529835354 小时前
对计算机中缓存的理解和使用Redis作为缓存
数据库·redis·缓存
月光水岸New6 小时前
Ubuntu 中建的mysql数据库使用Navicat for MySQL连接不上
数据库·mysql·ubuntu
狄加山6756 小时前
数据库基础1
数据库
我爱松子鱼6 小时前
mysql之规则优化器RBO
数据库·mysql
chengooooooo7 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
Rverdoser8 小时前
【SQL】多表查询案例
数据库·sql
Galeoto8 小时前
how to export a table in sqlite, and import into another
数据库·sqlite
人间打气筒(Ada)8 小时前
MySQL主从架构
服务器·数据库·mysql
leegong231118 小时前
学习PostgreSQL专家认证
数据库·学习·postgresql