execute dbms_stats.gather_table_stats($USER_NAME,$TABLE_NAME);
时间: 2023-09-12 10:08:17 浏览: 58
你可以使用以下命令执行 `dbms_stats.gather_table_stats` 过程:
```sql
BEGIN
dbms_stats.gather_table_stats('$USER_NAME', '$TABLE_NAME');
END;
```
请确保替换 `$USER_NAME` 和 `$TABLE_NAME` 为实际的用户名和表名。这将收集指定表的统计信息,以供优化查询和执行计划时使用。
相关问题
CREATE OR REPLACE PROCEDURE ANALYZE_TB AS NC_VER VARCHAR2(100); V_SQL VARCHAR2(300); V_TABLENAME VARCHAR2(50); CURSOR CUR_TABLE_TEMP IS SELECT TABLE_NAME FROM USER_TABLES WHERE TEMPORARY = 'Y'; BEGIN SELECT VERSION INTO NC_VER FROM SM_PRODUCT_VERSION WHERE ROWNUM = 1; IF (NC_VER < '5.0') THEN SYS.DBMS_STATS.GATHER_SCHEMA_STATS(OWNNAME => USER, ESTIMATE_PERCENT => 100, METHOD_OPT => 'FOR ALL INDEXED COLUMNS', CASCADE => FALSE); ELSE SYS.DBMS_STATS.GATHER_SCHEMA_STATS(OWNNAME => USER, ESTIMATE_PERCENT => 100, METHOD_OPT => 'FOR ALL INDEXED COLUMNS', CASCADE => TRUE); END IF; --delete temp table statistics OPEN CUR_TABLE_TEMP; LOOP FETCH CUR_TABLE_TEMP INTO V_TABLENAME; EXIT WHEN CUR_TABLE_TEMP%NOTFOUND; V_SQL := 'ANALYZE TABLE ' || V_TABLENAME || ' DELETE STATISTICS '; EXECUTE IMMEDIATE V_SQL; END LOOP; CLOSE CUR_TABLE_TEMP; EXCEPTION WHEN OTHERS THEN IF CUR_TABLE_TEMP%ISOPEN THEN CLOSE CUR_TABLE_TEMP; END IF; DBMS_OUTPUT.PUT_LINE(SQLERRM); END ANALYZE_TB;
这是一个 PL/SQL 存储过程,它的作用是分析数据库中的表并删除临时表的统计信息。首先,它会从 SM_PRODUCT_VERSION 表中获取版本信息,然后根据版本号调用不同的方法分析表的统计信息。对于版本号小于 5.0 的情况,它会调用 SYS.DBMS_STATS.GATHER_SCHEMA_STATS 进行统计信息分析,并将 CASCADE 参数设置为 FALSE;对于版本号大于等于 5.0 的情况,它会将 CASCADE 参数设置为 TRUE。接着,它会打开一个游标 CUR_TABLE_TEMP,查询数据库中所有临时表的表名,然后使用动态 SQL 语句 ANALYZE TABLE ... DELETE STATISTICS 删除这些表的统计信息。最后,它会捕获并处理可能发生的异常,并输出错误信息。
delimiter // CREATE FUNCTION DBROAM.GET_FORMVALUE ( str in varchar2 ) return number is cursor_name integer; ret integer; val number(12,4); begin val := -1; begin cursor_name := dbms_sql.open_cursor; dbms_sql.parse(cursor_name, 'select '||str||' from dual', dbms_sql.v7); dbms_sql.define_column (cursor_name, 1, val); ret := dbms_sql.execute(cursor_name); if dbms_sql.fetch_rows (cursor_name)<>0 then dbms_sql.column_value (cursor_name, 1, val); end if; dbms_sql.close_cursor(cursor_name); exception when others then dbms_sql.close_cursor(cursor_name); end; return val; end; // delimiter ;改写成mysql可以运行的
好的,根据你提供的Oracle函数代码,我将其转换为MySQL函数代码如下:
```
delimiter //
CREATE FUNCTION GET_FORMVALUE (str VARCHAR(100)) RETURNS DECIMAL(12,4)
BEGIN
DECLARE cursor_name INTEGER;
DECLARE ret INTEGER;
DECLARE val DECIMAL(12,4);
SET val = -1;
SET cursor_name = 0;
SET ret = 0;
BEGIN
SET cursor_name = (SELECT @@session.pseudo_thread_id);
PREPARE my_query FROM CONCAT('SELECT ', str, ' FROM dual');
EXECUTE my_query;
DEALLOCATE PREPARE my_query;
IF cursor_name > 0 THEN
SET ret = 1;
END IF;
IF ret = 1 THEN
FETCH cursor_name INTO val;
END IF;
CLOSE cursor_name;
END;
RETURN val;
END;//
delimiter ;
```
请注意,MySQL中不存在`dbms_sql`包,所以我使用了动态SQL来编写查询语句。此外,由于MySQL不支持`%TYPE`语法,因此我将返回值类型设置为DECIMAL(12,4)。如果你需要返回不同的数据类型,可以根据需要进行更改。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)