検索
ホームページデータベースmysql チュートリアル如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)Jun 07, 2016 pm 03:01 PM
javaoracle使用ストレージ詳しい説明プロセス

其实,这篇短文,我早就应该写了。因为,java存储过程今后在各大数据库厂商中越来越流行,功能也越来越强大。这里以Oracle为例,介绍一下java存储过程的具体用法。 iihero on csdn) 一、如何创建java存储过程? 通常有三种方法来创建java存储过程。 1. 使用o

其实,这篇短文,我早就应该写了。因为,java存储过程今后在各大数据库厂商中越来越流行,功能也越来越强大。这里以Oracle为例,介绍一下java存储过程的具体用法。
iihero  on csdn)

一、如何创建java存储过程?
通常有三种方法来创建java存储过程。

1. 使用oracle的sql语句来创建:

e.g. 使用create or replace and compile java source named "" as
       后边跟上java源程序。要求类的方法必须是public static的,才能用于存储过程。

如何在Oracle中使用Java存储过程 (详解)SQL> create or replace and compile java source named "javademo1"
如何在Oracle中使用Java存储过程 (详解)  
2  as
如何在Oracle中使用Java存储过程 (详解)  
3  import java.sql.*;
如何在Oracle中使用Java存储过程 (详解)  
4  public class JavaDemo1
如何在Oracle中使用Java存储过程 (详解)  
5  {
如何在Oracle中使用Java存储过程 (详解)  
6  public static void main(String[] argv)
如何在Oracle中使用Java存储过程 (详解)  
7  {
如何在Oracle中使用Java存储过程 (详解)  
8  System.out.println("hello, java demo1");
如何在Oracle中使用Java存储过程 (详解)  
9  }
如何在Oracle中使用Java存储过程 (详解) 
10  }
如何在Oracle中使用Java存储过程 (详解) 
11  /
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)Java 已创建。
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)SQL
> show errors java source "javademo1"
如何在Oracle中使用Java存储过程 (详解)没有错误。
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)SQL
> create or replace procedure javademo1
如何在Oracle中使用Java存储过程 (详解)  
2  as
如何在Oracle中使用Java存储过程 (详解)  
3  language java name 'JavaDemo1.main(java.lang.String[])';
如何在Oracle中使用Java存储过程 (详解)  
4  /
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)过程已创建。
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)SQL
> set serveroutput on
如何在Oracle中使用Java存储过程 (详解)SQL
> call javademo1();
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)调用完成。
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)SQL
> call dbms_java.set_output(5000);
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)调用完成。
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)SQL
> call javademo1();
如何在Oracle中使用Java存储过程 (详解)hello, java demo1
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)调用完成。
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)SQL
> call javademo1();
如何在Oracle中使用Java存储过程 (详解)hello, java demo1
如何在Oracle中使用Java存储过程 (详解)调用完成。

2. 使用外部class文件来装载创建
e.g. 这里既然用到了外部文件,必然要将class文件放到oracle Server的某一目录下边。

如何在Oracle中使用Java存储过程 (详解)public class OracleJavaProc
如何在Oracle中使用Java存储过程 (详解){
如何在Oracle中使用Java存储过程 (详解)    
public static void main(String[] argv)
如何在Oracle中使用Java存储过程 (详解)    {
如何在Oracle中使用Java存储过程 (详解)        System.out.println("It
's a Java Oracle procedure.");
如何在Oracle中使用Java存储过程 (详解)    }
如何在Oracle中使用Java存储过程 (详解)}
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)SQL> grant create any directory to scott;
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)授权成功。
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)SQL> conn scott/tiger@iihero.oracledb
如何在Oracle中使用Java存储过程 (详解)已连接。
如何在Oracle中使用Java存储过程 (详解)SQL> create or   replace   directory   test_dir   as  
'd:/oracle';
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)目录已创建。
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)SQL> create or replace java class using bfile(test_dir, 
'OracleJavaProc.CLASS')
如何在Oracle中使用Java存储过程 (详解)  2  /
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)Java 已创建。
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)SQL> create or replace procedure testjavaproc as language java name 
'OracleJavaProc.main(java.lang.String[])';
如何在Oracle中使用Java存储过程 (详解)  2  /
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)过程已创建。
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)SQL> call testjavaproc();
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)调用完成。
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)SQL> execute testjavaproc;
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)PL/SQL 过程已成功完成。
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)SQL> set serveroutput on size 5000
如何在Oracle中使用Java存储过程 (详解)SQL> call dbms_java.set_output(5000);
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)调用完成。
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)SQL> execute testjavaproc;
如何在Oracle中使用Java存储过程 (详解)It
's a Java Oracle procedure.

3. 我推荐的一种方法,直接使用loadjava命令远程装载并创建。
    先创建一个类, e.g.

如何在Oracle中使用Java存储过程 (详解)import java.sql.*;
如何在Oracle中使用Java存储过程 (详解)
import oracle.jdbc.*;
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)如何在Oracle中使用Java存储过程 (详解)
public class OracleJavaProc ...{
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)   
//Add a salgrade to the database.
如何在Oracle中使用Java存储过程 (详解)如何在Oracle中使用Java存储过程 (详解)
   public static void addSalGrade(int grade, int losal, int hisal) ...{
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)      System.out.println(
"Creating new salgrade for EMPLOYEE...");
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)如何在Oracle中使用Java存储过程 (详解)      
try ...{
如何在Oracle中使用Java存储过程 (详解)         Connection conn 
=
如何在Oracle中使用Java存储过程 (详解)            DriverManager.getConnection(
"jdbc:default:connection:");
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)         String sql 
=
如何在Oracle中使用Java存储过程 (详解)            
"INSERT INTO salgrade " +
如何在Oracle中使用Java存储过程 (详解)            
"(GRADE,LOSAL,HISAL) " +
如何在Oracle中使用Java存储过程 (详解)            
"VALUES(?,?,?)";
如何在Oracle中使用Java存储过程 (详解)         PreparedStatement pstmt 
= conn.prepareStatement(sql);
如何在Oracle中使用Java存储过程 (详解)         pstmt.setInt(
1,grade);
如何在Oracle中使用Java存储过程 (详解)         pstmt.setInt(
2,losal);
如何在Oracle中使用Java存储过程 (详解)         pstmt.setInt(
3,hisal);
如何在Oracle中使用Java存储过程 (详解)         pstmt.executeUpdate();
如何在Oracle中使用Java存储过程 (详解)         pstmt.close();
如何在Oracle中使用Java存储过程 (详解)         }

如何在Oracle中使用Java存储过程 (详解)如何在Oracle中使用Java存储过程 (详解)      
catch(SQLException e) ...{
如何在Oracle中使用Java存储过程 (详解)         System.err.println(
"ERROR! Adding Salgrade: " 
如何在Oracle中使用Java存储过程 (详解)           
+ e.getMessage());
如何在Oracle中使用Java存储过程 (详解)         }

如何在Oracle中使用Java存储过程 (详解)   }

如何在Oracle中使用Java存储过程 (详解)}

使用loadjava命令将其装载到服务器端并编译:

D:eclipse3.1workspacedbtest>loadjava -u scott/tiger@iihero.oracledb -v -resolve Or
acleJavaProc
.java
arguments: '-u' 'scott
/tiger@iihero.oracledb '-v' '-resolve' 'OracleJavaProc.java'
creating : source OracleJavaProc
loading  : source OracleJavaProc
resolving: source OracleJavaProc

查询一下状态:

如何在Oracle中使用Java存储过程 (详解)连接到:
如何在Oracle中使用Java存储过程 (详解)Oracle9i Enterprise Edition Release 
9.2.0.1.0 - Production
如何在Oracle中使用Java存储过程 (详解)
With the Partitioning, OLAP and Oracle Data Mining options
如何在Oracle中使用Java存储过程 (详解)JServer Release 
9.2.0.1.0 - Production
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)SQL
> SELECT object_name, object_type, status FROM user_objects WHERE object_type LIKE 'JAVA%';
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)
OBJECT_NAME
如何在Oracle中使用Java存储过程 (详解)
--------------------------------------------------------------------------------
如何在Oracle中使用Java存储过程 (详解)

如何在Oracle中使用Java存储过程 (详解)OBJECT_TYPE                          STATUS
如何在Oracle中使用Java存储过程 (详解)
------------------------------------ --------------
如何在Oracle中使用Java存储过程 (详解)
OracleJavaProc
如何在Oracle中使用Java存储过程 (详解)JAVA CLASS                           VALID
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)OracleJavaProc
如何在Oracle中使用Java存储过程 (详解)JAVA SOURCE                          VALID

测试一下存储过程:

如何在Oracle中使用Java存储过程 (详解)SQL> create or replace procedure add_salgrade(id number, losal number, hisal num
如何在Oracle中使用Java存储过程 (详解)ber) 
as language java name 'OracleJavaProc.addSalGrade(int, int, int)';
如何在Oracle中使用Java存储过程 (详解)  
2  /
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)过程已创建。
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)SQL
> set serveroutput on size 2000
如何在Oracle中使用Java存储过程 (详解)SQL
> call dbms_java.set_output(2000);
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)调用完成。
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)SQL
> execute add_salgrade(61000015000);
如何在Oracle中使用Java存储过程 (详解)Creating new salgrade 
for EMPLOYEE...
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)PL
/SQL 过程已成功完成。
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)SQL
> select * from salgrade where grade=6;
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)     GRADE      LOSAL      HISAL
如何在Oracle中使用Java存储过程 (详解)
---------- ---------- ----------
如何在Oracle中使用Java存储过程 (详解)
         6      10000      15000

 

二、如何更新你已经编写的java存储过程?  

假如要往类OracleJavaProc里添加一个存储过程方法,如何开发?
正确的步骤应该是先dropjava, 改程序,再loadjava。

e.g.修改OracleJavaProc类内容如下:

如何在Oracle中使用Java存储过程 (详解)import java.sql.*;
如何在Oracle中使用Java存储过程 (详解)
import oracle.jdbc.*
;
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)如何在Oracle中使用Java存储过程 (详解)
public class OracleJavaProc ...
{
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)   
// Add a salgrade to the database.

如何在Oracle中使用Java存储过程 (详解)如何在Oracle中使用Java存储过程 (详解)
   public static void addSalGrade(int grade, int losal, int hisal) ...{
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)      System.out.println(
"Creating new salgrade for EMPLOYEE..."
);
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)如何在Oracle中使用Java存储过程 (详解)      
try ...
{
如何在Oracle中使用Java存储过程 (详解)         Connection conn 
=

如何在Oracle中使用Java存储过程 (详解)            DriverManager.getConnection(
"jdbc:default:connection:");
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)         String sql 
=

如何在Oracle中使用Java存储过程 (详解)            
"INSERT INTO salgrade " +
如何在Oracle中使用Java存储过程 (详解)            
"(GRADE,LOSAL,HISAL) " +
如何在Oracle中使用Java存储过程 (详解)            
"VALUES(?,?,?)";
如何在Oracle中使用Java存储过程 (详解)         PreparedStatement pstmt 
=
 conn.prepareStatement(sql);
如何在Oracle中使用Java存储过程 (详解)         pstmt.setInt(
1
,grade);
如何在Oracle中使用Java存储过程 (详解)         pstmt.setInt(
2
,losal);
如何在Oracle中使用Java存储过程 (详解)         pstmt.setInt(
3
,hisal);
如何在Oracle中使用Java存储过程 (详解)         pstmt.executeUpdate();
如何在Oracle中使用Java存储过程 (详解)         pstmt.close();
如何在Oracle中使用Java存储过程 (详解)         }

如何在Oracle中使用Java存储过程 (详解)如何在Oracle中使用Java存储过程 (详解)      
catch(SQLException e) ...{
如何在Oracle中使用Java存储过程 (详解)         System.err.println(
"ERROR! Adding Salgrade: "
 
如何在Oracle中使用Java存储过程 (详解)           
+
 e.getMessage());
如何在Oracle中使用Java存储过程 (详解)         }

如何在Oracle中使用Java存储过程 (详解)   }

如何在Oracle中使用Java存储过程 (详解)   
如何在Oracle中使用Java存储过程 (详解)   
public static int getHiSal(int grade)
如何在Oracle中使用Java存储过程 (详解)如何在Oracle中使用Java存储过程 (详解)   
...
{
如何在Oracle中使用Java存储过程 (详解)如何在Oracle中使用Java存储过程 (详解)    
try ...
{
如何在Oracle中使用Java存储过程 (详解)        Connection conn 
=

如何在Oracle中使用Java存储过程 (详解)          DriverManager.getConnection(
"jdbc:default:connection:");
如何在Oracle中使用Java存储过程 (详解)        String sql 
= "SELECT hisal FROM salgrade WHERE grade = ?"
;
如何在Oracle中使用Java存储过程 (详解)        PreparedStatement pstmt 
=
 conn.prepareStatement(sql);pstmt.setInt(1, grade);
如何在Oracle中使用Java存储过程 (详解)        ResultSet rset 
=
 pstmt.executeQuery();
如何在Oracle中使用Java存储过程 (详解)        
int res = 0
;
如何在Oracle中使用Java存储过程 (详解)        
if
 (rset.next())
如何在Oracle中使用Java存储过程 (详解)如何在Oracle中使用Java存储过程 (详解)        
...
{
如何在Oracle中使用Java存储过程 (详解)            res 
= rset.getInt(1
);
如何在Oracle中使用Java存储过程 (详解)        }

如何在Oracle中使用Java存储过程 (详解)        rset.close();
如何在Oracle中使用Java存储过程 (详解)        
return res;

       }
如何在Oracle中使用Java存储过程 (详解)    
catch
 (SQLException e) 
如何在Oracle中使用Java存储过程 (详解)如何在Oracle中使用Java存储过程 (详解)    
...
{
如何在Oracle中使用Java存储过程 (详解)        System.err.println(
"ERROR! Querying Salgrade: "
 
如何在Oracle中使用Java存储过程 (详解)           
+
 e.getMessage());
          return -1;
如何在Oracle中使用Java存储过程 (详解)    }
    
如何在Oracle中使用Java存储过程 (详解)   }

如何在Oracle中使用Java存储过程 (详解)      
如何在Oracle中使用Java存储过程 (详解)}

如何更新呢?

D:eclipse3.1workspacedbtest>dropjava -u scott -v OracleJavaProc

D:
/
tiger@iihero.oracledbeclipse3.1workspacedbtest>loadjava -u scott -v -resolve Or
acleJavaProc
/
tiger@iihero.oracledb.java
arguments: '-u' 'scott
/tiger@iihero.oracledb' '-v' '-resolve' 'OracleJavaProc.
java'
creating : source OracleJavaProc
loading  : source OracleJavaProc
resolving: source OracleJavaProc

后边的应用示例:

SQL> create or replace function query_hisal(grade numberreturn number as langu
age java name 
'OracleJavaProc.getHiSal(int) return int'
;
  
2  /


函数已创建。

SQL
> set serveroutput on size 2000
SQL
> call dbms_java.set_output(2000);

调用完成。
SQL
> select query_hisal(5from
 dual;

QUERY_HISAL(
5
)
--------------

          9999

全文完!

用法个人见解:不要手动drop java source, 不要手动drop procedure。



声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
什么是oracle asm什么是oracle asmApr 18, 2022 pm 04:16 PM

oracle asm指的是“自动存储管理”,是一种卷管理器,可自动管理磁盘组并提供有效的数据冗余功能;它是做为单独的Oracle实例实施和部署。asm的优势:1、配置简单、可最大化推动数据库合并的存储资源利用;2、支持BIGFILE文件等。

oracle怎么查询所有索引oracle怎么查询所有索引May 13, 2022 pm 05:23 PM

方法:1、利用“select*from user_indexes where table_name=表名”语句查询表中索引;2、利用“select*from all_indexes where table_name=表名”语句查询所有索引。

Oracle怎么查询端口号Oracle怎么查询端口号May 13, 2022 am 10:10 AM

在Oracle中,可利用lsnrctl命令查询端口号,该命令是Oracle的监听命令;在启动、关闭或重启oracle监听器之前可使用该命令检查oracle监听器的状态,语法为“lsnrctl status”,结果PORT后的内容就是端口号。

oracle全角怎么转半角oracle全角怎么转半角May 13, 2022 pm 03:21 PM

在oracle中,可以利用“TO_SINGLE_BYTE(String)”将全角转换为半角;“TO_SINGLE_BYTE”函数可以将参数中所有多字节字符都替换为等价的单字节字符,只有当数据库字符集同时包含多字节和单字节字符的时候有效。

oracle怎么删除sequenceoracle怎么删除sequenceMay 13, 2022 pm 03:35 PM

在oracle中,可以利用“drop sequence sequence名”来删除sequence;sequence是自动增加数字序列的意思,也就是序列号,序列号自动增加不能重置,因此需要利用drop sequence语句来删除序列。

oracle怎么查询数据类型oracle怎么查询数据类型May 13, 2022 pm 04:19 PM

在oracle中,可以利用“select ... From all_tab_columns where table_name=upper('表名') AND owner=upper('数据库登录用户名');”语句查询数据库表的数据类型。

oracle查询怎么不区分大小写oracle查询怎么不区分大小写May 10, 2022 pm 05:45 PM

方法:1、利用“LOWER(字段值)”将字段转为小写,或者利用“UPPER(字段值)”将字段转为大写;2、利用“REGEXP_LIKE(字符串,正则表达式,'i')”,当参数设置为“i”时,说明进行匹配不区分大小写。

Oracle怎么修改sessionOracle怎么修改sessionMay 13, 2022 pm 05:06 PM

方法:1、利用“alter system set sessions=修改后的数值 scope=spfile”语句修改session参数;2、修改参数之后利用“shutdown immediate – startup”语句重启服务器即可生效。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。