Scripts:查询属于当前用户的所有表dba_tables_current_user.sql

本脚本展示了如何使用Oracle SQL查询当前连接用户的全部表,包括表名、所用表空间、上次分析时间及行数等关键信息。
-- +----------------------------------------------------------------------------+
-- |                          Jeffrey M. Hunter                                 |
-- |                      jhunter@idevelopment.info                             |
-- |                         www.idevelopment.info                              |
-- |----------------------------------------------------------------------------|
-- |      Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved.       |
-- |----------------------------------------------------------------------------|
-- | DATABASE : Oracle                                                          |
-- | FILE     : dba_tables_current_user.sql                                     |
-- | CLASS    : Database Administration                                         |
-- | PURPOSE  : Query all tables owned by the currently connected user.         |
-- | NOTE     : As with any code, ensure to test this script in a development   |
-- |            environment before attempting to run it in production.          |
-- +----------------------------------------------------------------------------+


SET TERMOUT OFF;
COLUMN current_instance NEW_VALUE current_instance NOPRINT;
COLUMN current_user NEW_VALUE current_user NOPRINT;
SELECT rpad(instance_name, 17) current_instance, rpad(user, 13) current_user FROM v$instance;
SET TERMOUT ON;


PROMPT 
PROMPT +------------------------------------------------------------------------+
PROMPT | Report   : Tables owned by &current_user                               |
PROMPT | Instance : &current_instance                                           |
PROMPT +------------------------------------------------------------------------+


SET ECHO        OFF
SET FEEDBACK    6
SET HEADING     ON
SET LINESIZE    180
SET PAGESIZE    50000
SET TERMOUT     ON
SET TIMING      OFF
SET TRIMOUT     ON
SET TRIMSPOOL   ON
SET VERIFY      OFF


CLEAR COLUMNS
CLEAR BREAKS
CLEAR COMPUTES


COLUMN table_name       FORMAT a30              HEADING "Table Name"
COLUMN tablespace_name  FORMAT a30              HEADING "Tablespace"
COLUMN last_analyzed    FORMAT a20              HEADING "Last Analyzed"
COLUMN num_rows         FORMAT 999,999,999,990  HEADING "# of Rows"


SELECT
    table_name
  , tablespace_name
  , TO_CHAR(last_analyzed, 'DD-MON-YYYY HH24:MI:SS') last_analyzed
  , num_rows
FROM
    user_tables
ORDER BY
    table_name
/
<think>问题:执行脚本时出现权限错误`./create_start.sh: line 193: ./scripts/1.create_main.sh: Permission denied` 原因分析: 1. 脚本文件没有执行权限。 2. 脚本文件可能是在Windows环境下创建,导致行结束符问题(CRLF vs LF),这可能会导致解释器错误。 解决方案: 1. 确保所有脚本文件具有可执行权限。 2. 确保脚本文件使用Unix行结束符(LF)。 在`create_start.sh`中,我们可以添加权限设置步骤,确保每一步的脚本都有执行权限。同时,我们可以使用`dos2unix`工具(如果可用)转换文件格式,但为了不增加额外依赖,我们也可以使用`sed`命令在运行时清除可能的CR字符。 修改`create_start.sh`,在复制脚本到`scripts`目录后,立即设置权限并处理行结束符。 具体修改如下: 在`create_start.sh`的`main`函数中,复制脚本到`scripts`目录的循环后面,添加设置权限和转换行结束符的代码。 ```bash # 复制所有步骤脚本到scripts目录 for i in {1..8}; do if [ -f "${STEP_FILES[$i]}" ]; then cp "${STEP_FILES[$i]}" "$SCRIPTS_DIR/" # 设置执行权限 chmod +x "${SCRIPTS_DIR}/${STEP_FILES[$i]}" # 清除可能的CR字符(处理Windows换行符问题) sed -i 's/\r$//' "${SCRIPTS_DIR}/${STEP_FILES[$i]}" fi done ``` 这样,在复制脚本文件后,立即赋予执行权限并转换行结束符,避免权限问题和行结束符问题。 同时,在运行每个步骤脚本之前,我们已经确保了权限和文件格式的正确性。 另外,在`create_start.sh`的开头,我们也可以检查自身权限,如果自身没有执行权限,则尝试设置。 在`create_start.sh`的最开始添加: ```bash #!/bin/bash # 确保脚本自身有执行权限 if [ ! -x "$0" ]; then chmod +x "$0" fi ``` 但注意,如果脚本本身没有执行权限,用户应该先赋予权限再执行,例如: ```bash chmod +x create_start.sh ./create_start.sh ``` 因此,我们可以在`create_start.sh`的启动时检查是否以可执行方式运行,如果没有,则提示用户。 修改后的`create_start.sh`完整代码如下(仅显示修改部分):</think>这个错误是因为脚本文件没有执行权限。让我提供一个完整的解决方案来修复这个问题并确保所有脚本都能正确运行。 ### 解决方案:修复权限问题并优化脚本执行 #### 1. 修复权限问题 ```bash #!/bin/bash # create_start.sh - 游戏项目创建主脚本(修复权限版) # ... 脚本前部分保持不变 ... # 主函数 main() { echo "=====================================================" echo " JackalGame 项目创建工具" echo "=====================================================" # 检查依赖 check_dependencies # 创建项目目录 mkdir -p "$PROJECT_DIR" mkdir -p "$SCRIPTS_DIR" # 复制所有步骤脚本到scripts目录并设置权限 for i in {1..8}; do script_file="${STEP_FILES[$i]}" if [ -f "$script_file" ]; then # 复制脚本 cp "$script_file" "$SCRIPTS_DIR/" # 设置执行权限 chmod +x "${SCRIPTS_DIR}/${script_file}" # 修复Windows换行符问题(如果存在) sed -i 's/\r$//' "${SCRIPTS_DIR}/${script_file}" fi done # 设置当前脚本的执行权限(确保自身可执行) chmod +x "$0" # ... 后续执行步骤保持不变 ... } # 执行主函数 main ``` #### 2. 创建修复权限的脚本 `fix_permissions.sh` ```bash #!/bin/bash # fix_permissions.sh - 修复所有脚本权限 # 项目根目录 PROJECT_DIR="JackalGame" SCRIPTS_DIR="scripts" # 步骤文件映射 declare -A STEP_FILES=( [1]="1.create_main.sh" [2]="2.create_core.sh" [3]="3.create_entities.sh" [4]="4.create_game_systems.sh" [5]="5.create_utils.sh" [6]="6.create_levels.sh" [7]="7.create_configs.sh" [8]="8.create_resources.sh" ) # 修复权限函数 fix_permissions() { echo "正在修复脚本权限..." # 修复主启动脚本权限 if [ -f "create_start.sh" ]; then chmod +x create_start.sh sed -i 's/\r$//' create_start.sh echo "已修复: create_start.sh" fi # 修复各步骤脚本权限 for i in {1..8}; do script_file="${STEP_FILES[$i]}" if [ -f "$script_file" ]; then chmod +x "$script_file" sed -i 's/\r$//' "$script_file" echo "已修复: $script_file" fi done # 修复scripts目录中的脚本 if [ -d "$SCRIPTS_DIR" ]; then for script in "$SCRIPTS_DIR"/*.sh; do if [ -f "$script" ]; then chmod +x "$script" sed -i 's/\r$//' "$script" echo "已修复: $script" fi done fi echo "权限修复完成!" } # 执行修复 fix_permissions ``` ### 使用说明 #### 1. 首次运行前修复权限 ```bash # 1. 赋予修复脚本执行权限 chmod +x fix_permissions.sh # 2. 运行修复脚本 ./fix_permissions.sh # 3. 运行主创建脚本 ./create_start.sh ``` #### 2. 完整的创建流程(包含权限修复) ```bash #!/bin/bash # create_start.sh - 完整版(包含权限自动修复) # ... 脚本前部分保持不变 ... # 主函数 main() { # ... 其他代码不变 ... # 执行各步骤 for step in {1..8}; do print_step_info $step if confirm_step $step; then echo "执行步骤 ${step}..." # 确保脚本有执行权限 script_path="./${SCRIPTS_DIR}/${STEP_FILES[$step]}" if [ ! -x "$script_path" ]; then chmod +x "$script_path" sed -i 's/\r$//' "$script_path" echo "已修复 ${STEP_FILES[$step]} 的执行权限" fi # 执行脚本 "$script_path" # ... 检查执行结果 ... fi done # ... 后续代码 ... } # ... 其他代码 ... ``` ### 常见问题及解决方案 #### 1. 权限被拒绝问题 ```bash # 解决方案: chmod +x 脚本文件名.sh # 如果是从Windows复制过来的文件,还需修复换行符: sed -i 's/\r$//' 脚本文件名.sh ``` #### 2. 脚本执行中途失败 在 `create_start.sh` 中添加错误处理: ```bash # 在脚本执行部分添加错误处理 "$script_path" if [ $? -ne 0 ]; then echo "步骤 ${step} 执行失败! 错误码: $?" read -p "是否继续? [Y/N] " choice if [[ ! $choice =~ [Yy] ]]; then exit 1 fi fi ``` #### 3. Windows/Linux换行符问题 在脚本开头添加自动修复: ```bash #!/bin/bash # 自动修复换行符问题(如果存在) if grep -q $'\r' "$0"; then echo "检测到Windows换行符,正在修复..." sed -i 's/\r$//' "$0" echo "修复完成,请重新运行脚本" exit 0 fi # 脚本正常内容... ``` ### 最佳实践建议 1. **统一脚本命名规范**: ```bash 0.create_start.sh # 主启动脚本 1.create_main.sh # 核心游戏文件 2.create_core.sh # ECS框架核心 ... # 其他脚本 9.fix_permissions.sh # 权限修复脚本 ``` 2. **创建清理脚本**: ```bash # cleanup.sh - 清理生成的文件 rm -rf JackalGame rm -f *.log rm -f scripts/*.sh ``` 3. **添加日志记录**: 在 `create_start.sh` 中添加: ```bash # 在脚本开头 LOG_FILE="creation_$(date +%Y%m%d_%H%M%S).log" exec > >(tee -a "$LOG_FILE") 2>&1 ``` 4. **添加依赖检查**: ```bash # 检查ImageMagick if ! command -v convert &> /dev/null; then echo "错误: 需要安装ImageMagick" echo "Ubuntu: sudo apt install imagemagick" echo "MacOS: brew install imagemagick" exit 1 fi ``` ### 最终项目结构 ```bash JackalGame/ ├── src/ │ ├── core/ │ ├── entities/ │ ├── systems/ │ ├── utils/ │ ├── config/ │ ├── levels/ │ └── assets/ └── scripts/ ├── create_start.sh # 主启动脚本 ├── 1.create_main.sh # 核心游戏文件 ├── 2.create_core.sh # ECS框架核心 ├── 3.create_entities.sh # 实体组件 ├── 4.create_game_systems.sh # 游戏系统 ├── 5.create_utils.sh # 工具类 ├── 6.create_levels.sh # 关卡数据 ├── 7.create_configs.sh # 配置文件 ├── 8.create_resources.sh # 资源文件 └── 9.fix_permissions.sh # 权限修复脚本 ``` ### 执行流程 1. 首次运行前: ```bash chmod +x *.sh ./9.fix_permissions.sh ``` 2. 创建项目: ```bash ./create_start.sh ``` 3. 如果遇到权限问题: ```bash ./9.fix_permissions.sh ./create_start.sh ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值